diff options
Diffstat (limited to 'ishtar_common/models.py')
-rw-r--r-- | ishtar_common/models.py | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/ishtar_common/models.py b/ishtar_common/models.py index 6eb36acdb..6cf2846a6 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -1390,6 +1390,16 @@ class DocumentItem(object): return self.documents.filter( image__isnull=False).exclude(image="").order_by("pk") + @property + def images_without_main_image(self): + if not hasattr(self, 'documents'): + return Document.objects.none() + if not hasattr(self, 'main_image'): + return self.images + return self.documents.filter( + image__isnull=False).exclude( + image="", pk=self.main_image.pk).order_by("pk") + def get_extra_actions(self, request): """ For sheet template: return "Add document / image" action @@ -4042,6 +4052,42 @@ class Document(OwnPerms, ImageModel, FullSearch, Imported): self.save(no_path_change=True) +def document_attached_changed(sender, **kwargs): + # associate a default main image + instance = kwargs.get("instance", None) + model = kwargs.get("model", None) + pk_set = kwargs.get("pk_set", None) + if not instance or not model: + return + + if hasattr(instance, "documents"): + items = [instance] + else: + if not pk_set: + return + try: + items = [model.objects.get(pk=pk) for pk in pk_set] + except model.DoesNotExist: + return + + for item in items: + q = item.documents.filter( + image__isnull=False).exclude(image='') + if item.main_image: + if q.filter(pk=item.main_image.pk).count(): + return + # the association has disappear not the main image anymore + item.main_image = None + item.skip_history_when_saving = True + item.save() + if not q.count(): + return + # by default get the lowest pk + item.main_image = q.order_by('pk').all()[0] + item.skip_history_when_saving = True + item.save() + + post_save.connect(cached_label_changed, sender=Document) |