summaryrefslogtreecommitdiff
path: root/ishtar_common/models.py
diff options
context:
space:
mode:
Diffstat (limited to 'ishtar_common/models.py')
-rw-r--r--ishtar_common/models.py81
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")