diff options
| author | Étienne Loks <etienne.loks@iggdrasil.net> | 2018-12-20 19:49:52 +0100 | 
|---|---|---|
| committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2019-01-11 17:30:46 +0100 | 
| commit | 686386b1994aac7df90b12a3ab40000e02e1eda7 (patch) | |
| tree | 3ae604ef9a36c7edaac48530db753810324e5494 /ishtar_common/models.py | |
| parent | fc9b4ecbba8e121e0d811a6d2e6fb64d8b27b475 (diff) | |
| download | Ishtar-686386b1994aac7df90b12a3ab40000e02e1eda7.tar.bz2 Ishtar-686386b1994aac7df90b12a3ab40000e02e1eda7.zip | |
Manage main image: model, auto associate default image
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) | 
