diff options
Diffstat (limited to 'ishtar_common/models.py')
| -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 | 
