diff options
-rw-r--r-- | ishtar_common/migrations/0053_auto_20180523_1126.py | 43 | ||||
-rw-r--r-- | ishtar_common/models.py | 29 |
2 files changed, 70 insertions, 2 deletions
diff --git a/ishtar_common/migrations/0053_auto_20180523_1126.py b/ishtar_common/migrations/0053_auto_20180523_1126.py new file mode 100644 index 000000000..f776dce30 --- /dev/null +++ b/ishtar_common/migrations/0053_auto_20180523_1126.py @@ -0,0 +1,43 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.10 on 2018-05-23 11:26 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('ishtar_common', '0052_m2m_images_migrate_imports'), + ] + + operations = [ + migrations.CreateModel( + name='CustomFormJsonField', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('order', models.IntegerField(default=1, verbose_name='Order')), + ('custom_form', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='json_fields', to='ishtar_common.CustomForm')), + ], + options={ + 'verbose_name': 'Custom form - Json data field', + 'verbose_name_plural': 'Custom form - Json data fields', + }, + ), + migrations.AddField( + model_name='jsondatafield', + name='value_type', + field=models.CharField(choices=[(b'T', 'Text'), (b'LT', 'Long text'), (b'I', 'Integer'), (b'F', 'Float'), (b'D', 'Date'), (b'C', 'Choices')], default=b'T', max_length=10, verbose_name='Type'), + ), + migrations.AddField( + model_name='customformjsonfield', + name='json_field', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='custom_form_details', to='ishtar_common.JsonDataField'), + ), + migrations.AddField( + model_name='jsondatafield', + name='custom_forms', + field=models.ManyToManyField(blank=True, through='ishtar_common.CustomFormJsonField', to='ishtar_common.CustomForm'), + ), + ] diff --git a/ishtar_common/models.py b/ishtar_common/models.py index b4a385b4e..0900b2d9a 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -1020,6 +1020,16 @@ class JsonDataSection(models.Model): return u"{} - {}".format(self.content_type, self.name) +JSON_VALUE_TYPES = ( + ('T', _(u"Text")), + ('LT', _(u"Long text")), + ('I', _(u"Integer")), + ('F', _(u"Float")), + ('D', _(u"Date")), + ('C', _(u"Choices")), +) + + class JsonDataField(models.Model): name = models.CharField(_(u"Name"), max_length=200) content_type = models.ForeignKey(ContentType) @@ -1030,8 +1040,12 @@ class JsonDataField(models.Model): u"'my_subkey' with data such as {'my_key': {'my_subkey': " u"'value'}}, its value will be reached with my_key__my_subkey.")) display = models.BooleanField(_(u"Display"), default=True) + value_type = models.CharField(_(u"Type"), default="T", max_length=10, + choices=JSON_VALUE_TYPES) order = models.IntegerField(_(u"Order"), default=10) section = models.ForeignKey(JsonDataSection, blank=True, null=True) + custom_forms = models.ManyToManyField( + "CustomForm", blank=True, through="CustomFormJsonField") class Meta: verbose_name = _(u"Json data - Field") @@ -1813,7 +1827,7 @@ class CustomForm(models.Model): cls._register = {} # ideally should be improved but only used in admin from ishtar_common.admin import ISHTAR_FORMS - from ishtar_common.forms import CustomForm + from ishtar_common.forms import CustomForm as CustomFormForm for app_form in ISHTAR_FORMS: for form in dir(app_form): @@ -1822,7 +1836,7 @@ class CustomForm(models.Model): continue form = getattr(app_form, form) if not inspect.isclass(form) \ - or not issubclass(form, CustomForm) \ + or not issubclass(form, CustomFormForm) \ or not getattr(form, 'form_slug', None): continue cls._register[form.form_slug] = form @@ -1844,6 +1858,17 @@ class ExcludedField(models.Model): verbose_name_plural = _(u"Excluded fields") +class CustomFormJsonField(models.Model): + custom_form = models.ForeignKey(CustomForm, related_name='json_fields') + json_field = models.ForeignKey(JsonDataField, + related_name='custom_form_details') + order = models.IntegerField(verbose_name=_(u"Order"), default=1) + + class Meta: + verbose_name = _(u"Custom form - Json data field") + verbose_name_plural = _(u"Custom form - Json data fields") + + class GlobalVar(models.Model, Cached): slug = models.SlugField(_(u"Variable name"), unique=True) description = models.TextField(_(u"Description of the variable"), |