diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2019-09-02 11:56:27 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2019-09-02 13:06:36 +0200 |
commit | 9d82b632716c190746623f851beed1a67e027abf (patch) | |
tree | c84d62588fedd9bd1e4023b8a4c9f1f08161c048 /ishtar_common/models.py | |
parent | 80152f2f2692fd576b55ab7e6adb3292770bbc68 (diff) | |
download | Ishtar-9d82b632716c190746623f851beed1a67e027abf.tar.bz2 Ishtar-9d82b632716c190746623f851beed1a67e027abf.zip |
Serialization: manage medias, manage model order (serialization and restore), serialize conf
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") |