diff options
| -rw-r--r-- | ishtar_common/forms_common.py | 23 | ||||
| -rw-r--r-- | ishtar_common/models.py | 9 | ||||
| -rw-r--r-- | ishtar_common/views.py | 13 | 
3 files changed, 38 insertions, 7 deletions
| diff --git a/ishtar_common/forms_common.py b/ishtar_common/forms_common.py index e5246d9bb..ff1cd9b5b 100644 --- a/ishtar_common/forms_common.py +++ b/ishtar_common/forms_common.py @@ -1156,6 +1156,9 @@ class DocumentForm(forms.ModelForm, CustomForm, ManageOldType):      }      def __init__(self, *args, **kwargs): +        main_items_fields = {} +        if "main_items_fields" in kwargs: +            main_items_fields = kwargs.pop("main_items_fields")          super(DocumentForm, self).__init__(*args, **kwargs)          for related_key in models.Document.RELATED_MODELS_ALT:              model = models.Document._meta.get_field(related_key).related_model @@ -1163,6 +1166,14 @@ class DocumentForm(forms.ModelForm, CustomForm, ManageOldType):                  model=model, remote=True, label=model._meta.verbose_name_plural,                  required=False, long_widget=True              ) +            if related_key in main_items_fields: +                for field_key, label in main_items_fields[related_key]: +                    disabled = False +                    if kwargs.get('initial', None) and kwargs['initial'].get( +                            field_key, False): +                        disabled = True +                    self.fields[field_key] = forms.BooleanField( +                        label=label, required=False, disabled=disabled)      def clean(self):          cleaned_data = self.cleaned_data @@ -1191,9 +1202,15 @@ class DocumentForm(forms.ModelForm, CustomForm, ManageOldType):                      continue                  related.remove(initial[pk])              for new_pk in new: -                if new_pk in initial.keys(): -                    continue -                related.add(related.model.objects.get(pk=new_pk)) +                related_item = related.model.objects.get(pk=new_pk) +                if new_pk not in initial.keys(): +                    related.add(related_item) +                key = "{}_{}_main_image".format(related_key, related_item.pk) +                if self.cleaned_data.get(key, []) and \ +                        related_item.main_image != item: +                    related_item.skip_history_when_saving = True +                    related_item.main_image = item +                    related_item.save()          item = models.Document.objects.get(pk=item.pk)          item.skip_history_when_saving = True          item.save()  # resave to regen the attached items diff --git a/ishtar_common/models.py b/ishtar_common/models.py index 6cf2846a6..e1318ef62 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -1392,13 +1392,11 @@ class DocumentItem(object):      @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") +            image="").exclude(pk=self.main_image.pk).order_by("pk")      def get_extra_actions(self, request):          """ @@ -3893,6 +3891,11 @@ class Document(OwnPerms, ImageModel, FullSearch, Imported):              pk=self.pk, image__isnull=False).exclude(image='')      @property +    def main_image(self): +        if self.images.count(): +            return self.images.all()[0] + +    @property      def has_related(self):          for rel in self.RELATED_MODELS:              if getattr(self, rel).count(): diff --git a/ishtar_common/views.py b/ishtar_common/views.py index 72418e4fa..710feb8c6 100644 --- a/ishtar_common/views.py +++ b/ishtar_common/views.py @@ -1748,7 +1748,18 @@ class DocumentEditView(DocumentFormMixin, UpdateView):              if hasattr(value, 'pk'):                  value = value.pk              initial[k] = value - +        # main image initialisation +        if document.image: +            kwargs["main_items_fields"] = {} +            for k in models.Document.RELATED_MODELS: +                kwargs["main_items_fields"][k] = [] +                for related_item in getattr(document, k).all(): +                    key = "{}_{}_main_image".format(k, related_item.pk) +                    kwargs["main_items_fields"][k].append( +                        (key, u"{} - {}".format( +                            _(u"Main image for"), related_item))) +                    if related_item.main_image == document: +                        initial[key] = True          kwargs['initial'] = initial          return kwargs | 
