Intial commit of the forms manager app
Signed-off-by: Roberto Rosario <roberto.rosario.gonzalez@gmail.com>
This commit is contained in:
@@ -0,0 +1,91 @@
|
||||
from __future__ import unicode_literals
|
||||
|
||||
import json
|
||||
import logging
|
||||
|
||||
from django.core import mail
|
||||
from django.db import models, transaction
|
||||
from django.template import Context, Template
|
||||
from django.utils.encoding import force_text, python_2_unicode_compatible
|
||||
from django.utils.html import strip_tags
|
||||
from django.utils.module_loading import import_string
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
@python_2_unicode_compatible
|
||||
class FieldChoice(models.Model):
|
||||
label = models.CharField(max_length=128, verbose_name=_('Label'))
|
||||
dotted_path = models.CharField(
|
||||
max_length=128, verbose_name=_('Dotted path')
|
||||
)
|
||||
|
||||
class Meta:
|
||||
ordering = ('label',)
|
||||
verbose_name = _('Field choice')
|
||||
verbose_name_plural = _('Field choices')
|
||||
|
||||
def __str__(self):
|
||||
return self.label
|
||||
|
||||
|
||||
class FormTemplate(models.Model):
|
||||
name = models.CharField(max_length=32, verbose_name=_('Name'))
|
||||
label = models.CharField(max_length=128, verbose_name=_('Label'))
|
||||
enabled = models.BooleanField(default=True, verbose_name=_('Enabled'))
|
||||
|
||||
class Meta:
|
||||
ordering = ('label',)
|
||||
verbose_name = _('Form template')
|
||||
verbose_name_plural = _('Form templates')
|
||||
|
||||
def get_fields_dictionary(self):
|
||||
result = {}
|
||||
|
||||
for field in self.fields.all():
|
||||
result[field.name] = {
|
||||
'label': field.get_arguments().get('label', self.name),
|
||||
'class': field.choice.dotted_path,
|
||||
'kwargs': field.get_arguments(),
|
||||
}
|
||||
|
||||
return result
|
||||
|
||||
|
||||
class FormTemplateField(models.Model):
|
||||
form_template = models.ForeignKey(
|
||||
on_delete=models.CASCADE, related_name='fields', to=FormTemplate,
|
||||
verbose_name=_('Form template field')
|
||||
)
|
||||
name = models.CharField(
|
||||
max_length=128, verbose_name=_('Name')
|
||||
)
|
||||
choice = models.ForeignKey(
|
||||
on_delete=models.CASCADE, related_name='forms', to=FieldChoice,
|
||||
verbose_name=_('Choice')
|
||||
)
|
||||
arguments = models.TextField(
|
||||
blank=True, verbose_name=_('Arguments')
|
||||
)
|
||||
widget = models.CharField(
|
||||
blank=True, max_length=128, verbose_name=_('Widget')
|
||||
)
|
||||
widget_arguments = models.CharField(
|
||||
blank=True, max_length=128, verbose_name=_('Widget arguments')
|
||||
)
|
||||
enabled = models.BooleanField(default=True, verbose_name=_('Enabled'))
|
||||
|
||||
class Meta:
|
||||
verbose_name = _('Form template field')
|
||||
verbose_name_plural = _('Form template fields')
|
||||
|
||||
def get_arguments(self):
|
||||
return json.loads(self.arguments or '{}')
|
||||
|
||||
|
||||
class FormInstance(models.Model):
|
||||
form_template = models.ForeignKey(
|
||||
on_delete=models.CASCADE, related_name='instances', to=FormTemplate,
|
||||
verbose_name=_('Form template field')
|
||||
)
|
||||
Reference in New Issue
Block a user