summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2018-05-23 11:38:54 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2018-06-12 08:49:06 +0200
commitb40361b7c1b8e98690b1f4cf6b5154f8b22395ff (patch)
tree896a06457d909e25841069f0feb8a97ea78268b1
parente2f67b4b4abe5b2220c5de4dbdcdeac4fcf95d53 (diff)
downloadIshtar-b40361b7c1b8e98690b1f4cf6b5154f8b22395ff.tar.bz2
Ishtar-b40361b7c1b8e98690b1f4cf6b5154f8b22395ff.zip
Wizards - JSON fields: database migration (refs #4089)
-rw-r--r--ishtar_common/migrations/0053_auto_20180523_1126.py43
-rw-r--r--ishtar_common/models.py29
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"),