diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2018-12-20 20:29:51 +0100 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2019-01-11 17:30:46 +0100 |
commit | 8b72b5f16db50869f65fdef29ad22ffd04523b8f (patch) | |
tree | 54306339d88c00d14955ed67629edaf9d8a02231 | |
parent | 686386b1994aac7df90b12a3ab40000e02e1eda7 (diff) | |
download | Ishtar-8b72b5f16db50869f65fdef29ad22ffd04523b8f.tar.bz2 Ishtar-8b72b5f16db50869f65fdef29ad22ffd04523b8f.zip |
Image: form to change main image - fix image in sheets
-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 |