diff options
Diffstat (limited to 'ishtar_common')
| -rw-r--r-- | ishtar_common/forms.py | 28 | ||||
| -rw-r--r-- | ishtar_common/forms_common.py | 8 | 
2 files changed, 35 insertions, 1 deletions
diff --git a/ishtar_common/forms.py b/ishtar_common/forms.py index 07d1ac417..1416dd464 100644 --- a/ishtar_common/forms.py +++ b/ishtar_common/forms.py @@ -308,9 +308,21 @@ class CustomForm(BSForm):              c_field.order_number = idx              fields[key] = c_field          # custom field after classic fields +        instance = getattr(self, "instance", None)          for k in sorted(new_fields.keys()):              alt_key, alt_field = new_fields.pop(k)              alt_field.order_number = k +            # manage initial data +            if instance: +                data = instance.data +                nok = False +                for k_part in alt_key[len("data__"):].split("__"): +                    if k_part not in data: +                        nok = True +                        break +                    data = data[k_part] +                if not nok: +                    alt_field.initial = data              fields[alt_key] = alt_field          self.fields = fields          self._post_init() @@ -464,6 +476,22 @@ class CustomForm(BSForm):              customs.append((key, field.label))          return sorted(customs, key=lambda x: x[1]) +    def save_json_fields(self, item): +        """ +        Edit JSON fields of an item after form validation. +        Do not save. Return if item has been changed. +        """ +        changed = False +        for key in self.cleaned_data: +            if not key.startswith("data__"): +                continue +            item.data = update_data( +                item.data, +                generate_dict_from_data_string(key, self.cleaned_data[key]) +            ) +            changed = True +        return changed +  class CustomFormSearch(FormPermissionForm, forms.Form):      """ diff --git a/ishtar_common/forms_common.py b/ishtar_common/forms_common.py index 11649a078..e6428fa86 100644 --- a/ishtar_common/forms_common.py +++ b/ishtar_common/forms_common.py @@ -2437,10 +2437,16 @@ class DocumentForm(forms.ModelForm, CustomForm, ManageOldType):          except models.Organization.DoesNotExist:              return +      def save(self, commit=True):          if not self.cleaned_data.get("authors", None):              self.cleaned_data["authors"] = [] -        item = super(DocumentForm, self).save(commit=commit) +        item = super().save(commit=commit) +        if self.save_json_fields(item): +            item.history_modifier = self.user +            item.skip_history_when_saving = True +            item.save() +          for related_key in models.Document.RELATED_MODELS:              related = getattr(item, related_key)              initial = dict([(rel.pk, rel) for rel in related.all()])  | 
