summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ishtar_common/forms_common.py23
-rw-r--r--ishtar_common/models.py9
-rw-r--r--ishtar_common/views.py13
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