diff options
Diffstat (limited to 'ishtar_common')
-rw-r--r-- | ishtar_common/models.py | 35 |
1 files changed, 27 insertions, 8 deletions
diff --git a/ishtar_common/models.py b/ishtar_common/models.py index 678e2ce41..cb225d0f6 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -1091,6 +1091,8 @@ class FullSearch(models.Model): INT_SEARCH_VECTORS = [] M2M_SEARCH_VECTORS = [] PARENT_SEARCH_VECTORS = [] + # prevent circular dependency + PARENT_ONLY_SEARCH_VECTORS = [] class Meta: abstract = True @@ -1105,7 +1107,7 @@ class FullSearch(models.Model): if issubclass(rel_model, (GeneralType, HierarchicalType)): yield k - def update_search_vector(self, save=True): + def update_search_vector(self, save=True, exclude_parent=False): """ Update the search vector :param save: True if you want to save the object immediately @@ -1153,14 +1155,27 @@ class FullSearch(models.Model): search_vectors.append( "'{}':1".format(q.all()[0][INT_SEARCH_VECTOR])) - # copy parent vector fields - for PARENT_SEARCH_VECTOR in self.PARENT_SEARCH_VECTORS: - parent = getattr(self, PARENT_SEARCH_VECTOR) + if not exclude_parent: + # copy parent vector fields + for PARENT_SEARCH_VECTOR in self.PARENT_SEARCH_VECTORS: + parent = getattr(self, PARENT_SEARCH_VECTOR) + if hasattr(parent, 'all'): # m2m + for p in parent.all(): + search_vectors.append(p.search_vector) + elif parent: + search_vectors.append(parent.search_vector) + + for PARENT_ONLY_SEARCH_VECTOR in self.PARENT_ONLY_SEARCH_VECTORS: + parent = getattr(self, PARENT_ONLY_SEARCH_VECTOR) if hasattr(parent, 'all'): # m2m for p in parent.all(): - search_vectors.append(p.search_vector) + search_vectors.append( + p.update_search_vector(save=False, exclude_parent=True) + ) elif parent: - search_vectors.append(parent.search_vector) + search_vectors.append( + parent.update_search_vector(save=False, exclude_parent=True) + ) if self.BASE_SEARCH_VECTORS: # query "simple" fields @@ -1194,11 +1209,15 @@ class FullSearch(models.Model): [data]) row = cursor.fetchone() search_vectors.append(row[0]) - self.search_vector = merge_tsvectors(search_vectors) - changed = old_search != self.search_vector + # self.search_vector = merge_tsvectors(search_vectors) + new_search_vector = merge_tsvectors(search_vectors) + changed = old_search != new_search_vector if save and changed: + self.search_vector = new_search_vector self.skip_history_when_saving = True self.save() + elif not save: + return new_search_vector return changed |