diff options
Diffstat (limited to 'ishtar_common/models.py')
| -rw-r--r-- | ishtar_common/models.py | 81 | 
1 files changed, 81 insertions, 0 deletions
| diff --git a/ishtar_common/models.py b/ishtar_common/models.py index 35c35e97b..8ee72e7b3 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -1256,15 +1256,27 @@ class RelationItem(models.Model):                                  render_below=render_below, full=full) +class JsonDataSectionManager(models.Manager): +    def get_by_natural_key(self, name, app_label, model): +        return self.get(name=name, +                        content_type__app_label=app_label, +                        content_type__model=model) + +  class JsonDataSection(models.Model):      content_type = models.ForeignKey(ContentType)      name = models.CharField(_("Name"), max_length=200)      order = models.IntegerField(_("Order"), default=10) +    objects = JsonDataSectionManager()      class Meta:          verbose_name = _("Json data - Menu")          verbose_name_plural = _("Json data - Menus")          ordering = ['order', 'name'] +        unique_together = ("name", "content_type") + +    def natural_key(self): +        return (self.name, self.content_type.app_label, self.content_type.model)      def __str__(self):          return "{} - {}".format(self.content_type, self.name) @@ -1281,6 +1293,12 @@ JSON_VALUE_TYPES = (  ) +class JsonDataFieldManager(models.Manager): +    def get_by_natural_key(self, key, app_label, model): +        return self.get(key=key, content_type__app_label=app_label, +                        content_type__model=model) + +  class JsonDataField(models.Model):      name = models.CharField(_("Name"), max_length=200)      content_type = models.ForeignKey(ContentType) @@ -1300,11 +1318,16 @@ class JsonDataField(models.Model):                                  on_delete=models.SET_NULL)      custom_forms = models.ManyToManyField(          "CustomForm", blank=True, through="CustomFormJsonField") +    objects = JsonDataFieldManager()      class Meta:          verbose_name = _("Json data - Field")          verbose_name_plural = _("Json data - Fields")          ordering = ['order', 'name'] +        unique_together = ("content_type", "key") + +    def natural_key(self): +        return (self.key, self.content_type.app_label, self.content_type.model)      def __str__(self):          return "{} - {}".format(self.content_type, self.name) @@ -2794,6 +2817,7 @@ class IshtarSiteProfile(models.Model, Cached):          help_text=_("Spatial Reference System used for display when no SRS is "                      "defined")      ) +    objects = SlugModelManager()      class Meta:          verbose_name = _("Ishtar site profile") @@ -2803,6 +2827,9 @@ class IshtarSiteProfile(models.Model, Cached):      def __str__(self):          return str(self.label) +    def natural_key(self): +        return (self.slug,) +      def has_overload(self, key):          return self.config and self.config in ALTERNATE_CONFIGS and \                 hasattr(ALTERNATE_CONFIGS[self.config], key) @@ -2883,6 +2910,11 @@ post_save.connect(cached_site_changed, sender=IshtarSiteProfile)  post_delete.connect(cached_site_changed, sender=IshtarSiteProfile) +class CustomFormManager(models.Manager): +    def get_by_natural_key(self, name, form): +        return self.get(name=name, form=form) + +  class CustomForm(models.Model):      name = models.CharField(_("Name"), max_length=250)      form = models.CharField(_("Form"), max_length=250) @@ -2897,11 +2929,18 @@ class CustomForm(models.Model):                      "user and user type is useless."))      users = models.ManyToManyField('IshtarUser', blank=True)      user_types = models.ManyToManyField('PersonType', blank=True) +    objects = CustomFormManager() + +    SERIALIZATION_EXCLUDE = ("users", )      class Meta:          verbose_name = _("Custom form")          verbose_name_plural = _("Custom forms")          ordering = ['name', 'form'] +        unique_together = (('name', 'form'),) + +    def natural_key(self): +        return (self.name, self.form)      def __str__(self):          return "{} - {}".format(self.name, self.form) @@ -2987,13 +3026,40 @@ class CustomForm(models.Model):          return res +class ExcludedFieldManager(models.Manager): +    def get_by_natural_key(self, custom_form_name, custom_form_form, +                           field): +        return self.get(custom_form__name=custom_form_name, +                        custom_form__form=custom_form_form, +                        field=field) + +  class ExcludedField(models.Model):      custom_form = models.ForeignKey(CustomForm, related_name='excluded_fields')      field = models.CharField(_("Field"), max_length=250) +    objects = ExcludedFieldManager()      class Meta:          verbose_name = _("Excluded field")          verbose_name_plural = _("Excluded fields") +        unique_together = ("custom_form", "field") + +    def natural_key(self): +        return (self.custom_form.name , self.custom_form.form, +                self.field) + + +class CustomFormJsonFieldManager(models.Manager): +    def get_by_natural_key(self, custom_form_name, custom_form_form, +                           json_field_key, json_field_app_label, +                           json_field_model): +        return self.get( +            custom_form__name=custom_form_name, +            custom_form__form=custom_form_form, +            json_field__key=json_field_key, +            json_field__content_type__app_label=json_field_app_label, +            json_field__content_type__model=json_field_model +        )  class CustomFormJsonField(models.Model): @@ -3004,10 +3070,19 @@ class CustomFormJsonField(models.Model):                               default='')      order = models.IntegerField(verbose_name=_("Order"), default=1)      help_text = models.TextField(_("Help"), blank=True, null=True) +    objects = CustomFormJsonFieldManager()      class Meta:          verbose_name = _("Custom form - Json data field")          verbose_name_plural = _("Custom form - Json data fields") +        unique_together = ("custom_form", "json_field") + +    def natural_key(self): +        return ( +            self.custom_form.name, self.custom_form.form, +            self.json_field.key, self.json_field.content_type.app_label, +            self.json_field.content_type.model +        )  class GlobalVar(models.Model, Cached): @@ -3015,16 +3090,21 @@ class GlobalVar(models.Model, Cached):      description = models.TextField(_("Description of the variable"),                                     null=True, blank=True)      value = models.TextField(_("Value"), null=True, blank=True) +    objects = SlugModelManager()      class Meta:          verbose_name = _("Global variable")          verbose_name_plural = _("Global variables")          ordering = ['slug'] +    def natural_key(self): +        return (self.slug,) +      def __str__(self):          return str(self.slug) +  def cached_globalvar_changed(sender, **kwargs):      if not kwargs['instance']:          return @@ -3328,6 +3408,7 @@ class DocumentTemplate(models.Model):          help_text=_("Only relevant for label template")      )      objects = SlugModelManager() +    SERIALIZATION_FILES = ("template", )      class Meta:          verbose_name = _("Document template") | 
