mirror of
https://github.com/Hopiu/django-fobi.git
synced 2026-05-09 21:34:55 +00:00
initial work on django 2.0 compatibility
This commit is contained in:
parent
c8fe8c8d96
commit
c0acaf1d43
13 changed files with 354 additions and 122 deletions
|
|
@ -1,18 +1,19 @@
|
|||
-r common.txt
|
||||
-r test.txt
|
||||
-r style_checkers.txt
|
||||
-r djangorestframework.txt
|
||||
#-r djangorestframework.txt
|
||||
|
||||
Django>=2.0,<2.1
|
||||
django-admin-tools>=0.8.0
|
||||
django-autoslug-iplweb
|
||||
django-ckeditor>=5.4.0
|
||||
django-debug-toolbar>=1.6
|
||||
django-formtools>=2.0
|
||||
django-registration-redux>=1.4
|
||||
django-simple-captcha>=0.5.5
|
||||
djangorestframework==3.7.7
|
||||
easy-thumbnails>=2.4.1
|
||||
sqlparse>=0.2.2
|
||||
|
||||
https://github.com/neithere/django-autoslug/archive/master.zip
|
||||
# django-formtools, compatible with Django 1.11
|
||||
#https://github.com/django/django-formtools/archive/master.tar.gz
|
||||
|
|
|
|||
|
|
@ -21,54 +21,77 @@ __all__ = ('FobiFormWidget',)
|
|||
class FobiFormWidget(CMSPlugin):
|
||||
"""Plugin for storing ``django-fobi`` form reference."""
|
||||
|
||||
form_entry = models.ForeignKey('fobi.FormEntry', verbose_name=_("Form"))
|
||||
form_entry = models.ForeignKey(
|
||||
'fobi.FormEntry',
|
||||
verbose_name=_("Form"),
|
||||
on_delete=models.CASCADE
|
||||
)
|
||||
|
||||
form_template_name = models.CharField(
|
||||
_("Form template name"), max_length=255, null=True, blank=True,
|
||||
_("Form template name"),
|
||||
max_length=255,
|
||||
null=True,
|
||||
blank=True,
|
||||
choices=get_form_template_choices(),
|
||||
help_text=_("Template to render the form with.")
|
||||
)
|
||||
|
||||
hide_form_title = models.BooleanField(
|
||||
_("Hide form title"), default=False,
|
||||
_("Hide form title"),
|
||||
default=False,
|
||||
help_text=_("If checked, no form title is shown.")
|
||||
)
|
||||
|
||||
form_title = models.CharField(
|
||||
_("Form title"), max_length=255, null=True, blank=True,
|
||||
_("Form title"),
|
||||
max_length=255,
|
||||
null=True,
|
||||
blank=True,
|
||||
help_text=_("Overrides the default form title.")
|
||||
)
|
||||
|
||||
form_submit_button_text = models.CharField(
|
||||
_("Submit button text"), max_length=255, null=True, blank=True,
|
||||
_("Submit button text"),
|
||||
max_length=255,
|
||||
null=True,
|
||||
blank=True,
|
||||
help_text=_("Overrides the default form submit button text.")
|
||||
)
|
||||
|
||||
success_page_template_name = models.CharField(
|
||||
_("Success page template name"), max_length=255, null=True, blank=True,
|
||||
_("Success page template name"),
|
||||
max_length=255,
|
||||
null=True,
|
||||
blank=True,
|
||||
choices=get_success_page_template_choices(),
|
||||
help_text=_("Template to render the success page with.")
|
||||
)
|
||||
|
||||
hide_success_page_title = models.BooleanField(
|
||||
_("Hide success page title"), default=False,
|
||||
_("Hide success page title"),
|
||||
default=False,
|
||||
help_text=_("If checked, no success page title is shown.")
|
||||
)
|
||||
|
||||
success_page_title = models.CharField(
|
||||
_("Succes page title"), max_length=255, null=True, blank=True,
|
||||
_("Succes page title"),
|
||||
max_length=255,
|
||||
null=True,
|
||||
blank=True,
|
||||
help_text=_("Overrides the default success page title.")
|
||||
)
|
||||
|
||||
success_page_text = models.TextField(
|
||||
_("Succes page text"), null=True, blank=True,
|
||||
_("Succes page text"),
|
||||
null=True,
|
||||
blank=True,
|
||||
help_text=_("Overrides the default success page text.")
|
||||
)
|
||||
|
||||
search_fields = ('form_entry__name',)
|
||||
|
||||
class Meta(object):
|
||||
"""Meta class."""
|
||||
"""Meta options."""
|
||||
|
||||
app_label = 'cms'
|
||||
if CMS_VERSION_GT_3_0:
|
||||
|
|
|
|||
|
|
@ -30,52 +30,76 @@ class FobiFormWidget(models.Model, IntegrationProcessor):
|
|||
can_redirect = True
|
||||
|
||||
# The configuration fields
|
||||
form_entry = models.ForeignKey('fobi.FormEntry', verbose_name=_("Form"))
|
||||
form_entry = models.ForeignKey(
|
||||
'fobi.FormEntry',
|
||||
verbose_name=_("Form"),
|
||||
on_delete=models.CASCADE
|
||||
)
|
||||
|
||||
form_template_name = models.CharField(
|
||||
_("Form template name"), max_length=255, null=True, blank=True,
|
||||
_("Form template name"),
|
||||
max_length=255,
|
||||
null=True,
|
||||
blank=True,
|
||||
choices=get_form_template_choices(),
|
||||
help_text=_("Template to render the form with.")
|
||||
)
|
||||
|
||||
hide_form_title = models.BooleanField(
|
||||
_("Hide form title"), default=False,
|
||||
_("Hide form title"),
|
||||
default=False,
|
||||
help_text=_("If checked, no form title is shown.")
|
||||
)
|
||||
|
||||
form_title = models.CharField(
|
||||
_("Form title"), max_length=255, null=True, blank=True,
|
||||
_("Form title"),
|
||||
max_length=255,
|
||||
null=True,
|
||||
blank=True,
|
||||
help_text=_("Overrides the default form title.")
|
||||
)
|
||||
|
||||
form_submit_button_text = models.CharField(
|
||||
_("Submit button text"), max_length=255, null=True, blank=True,
|
||||
_("Submit button text"),
|
||||
max_length=255,
|
||||
null=True,
|
||||
blank=True,
|
||||
help_text=_("Overrides the default form submit button text.")
|
||||
)
|
||||
|
||||
success_page_template_name = models.CharField(
|
||||
_("Success page template name"), max_length=255, null=True, blank=True,
|
||||
_("Success page template name"),
|
||||
max_length=255,
|
||||
null=True,
|
||||
blank=True,
|
||||
choices=get_success_page_template_choices(),
|
||||
help_text=_("Template to render the success page with.")
|
||||
)
|
||||
|
||||
hide_success_page_title = models.BooleanField(
|
||||
_("Hide success page title"), default=False,
|
||||
_("Hide success page title"),
|
||||
default=False,
|
||||
help_text=_("If checked, no success page title is shown.")
|
||||
)
|
||||
|
||||
success_page_title = models.CharField(
|
||||
_("Succes page title"), max_length=255, null=True, blank=True,
|
||||
_("Succes page title"),
|
||||
max_length=255,
|
||||
null=True,
|
||||
blank=True,
|
||||
help_text=_("Overrides the default success page title.")
|
||||
)
|
||||
|
||||
success_page_text = models.TextField(
|
||||
_("Succes page text"), null=True, blank=True,
|
||||
_("Succes page text"),
|
||||
null=True,
|
||||
blank=True,
|
||||
help_text=_("Overrides the default success page text.")
|
||||
)
|
||||
|
||||
class Meta:
|
||||
"""Meta class."""
|
||||
class Meta(object):
|
||||
"""Meta options."""
|
||||
|
||||
abstract = True
|
||||
app_label = 'fobi'
|
||||
# db_table = 'page_page_fobiformwidget'
|
||||
|
|
|
|||
|
|
@ -26,52 +26,75 @@ class FobiFormPage(Page, RichText):
|
|||
:property str template: If given used for rendering the form.
|
||||
"""
|
||||
|
||||
form_entry = models.ForeignKey('fobi.FormEntry', verbose_name=_("Form"))
|
||||
form_entry = models.ForeignKey(
|
||||
'fobi.FormEntry',
|
||||
verbose_name=_("Form"),
|
||||
on_delete=models.CASCADE
|
||||
)
|
||||
|
||||
form_template_name = models.CharField(
|
||||
_("Form template name"), max_length=255, null=True, blank=True,
|
||||
_("Form template name"),
|
||||
max_length=255,
|
||||
null=True,
|
||||
blank=True,
|
||||
choices=get_form_template_choices(),
|
||||
help_text=_("Template to render the form with.")
|
||||
)
|
||||
|
||||
hide_form_title = models.BooleanField(
|
||||
_("Hide form title"), default=False,
|
||||
_("Hide form title"),
|
||||
default=False,
|
||||
help_text=_("If checked, no form title is shown.")
|
||||
)
|
||||
|
||||
form_title = models.CharField(
|
||||
_("Form title"), max_length=255, null=True, blank=True,
|
||||
_("Form title"),
|
||||
max_length=255,
|
||||
null=True,
|
||||
blank=True,
|
||||
help_text=_("Overrides the default form title.")
|
||||
)
|
||||
|
||||
form_submit_button_text = models.CharField(
|
||||
_("Submit button text"), max_length=255, null=True, blank=True,
|
||||
_("Submit button text"),
|
||||
max_length=255,
|
||||
null=True,
|
||||
blank=True,
|
||||
help_text=_("Overrides the default form submit button text.")
|
||||
)
|
||||
|
||||
success_page_template_name = models.CharField(
|
||||
_("Success page template name"), max_length=255, null=True, blank=True,
|
||||
_("Success page template name"),
|
||||
max_length=255,
|
||||
null=True,
|
||||
blank=True,
|
||||
choices=get_success_page_template_choices(),
|
||||
help_text=_("Template to render the success page with.")
|
||||
)
|
||||
|
||||
hide_success_page_title = models.BooleanField(
|
||||
_("Hide success page title"), default=False,
|
||||
_("Hide success page title"),
|
||||
default=False,
|
||||
help_text=_("If checked, no success page title is shown.")
|
||||
)
|
||||
|
||||
success_page_title = models.CharField(
|
||||
_("Succes page title"), max_length=255, null=True, blank=True,
|
||||
_("Succes page title"),
|
||||
max_length=255,
|
||||
null=True,
|
||||
blank=True,
|
||||
help_text=_("Overrides the default success page title.")
|
||||
)
|
||||
|
||||
success_page_text = models.TextField(
|
||||
_("Succes page text"), null=True, blank=True,
|
||||
_("Succes page text"),
|
||||
null=True,
|
||||
blank=True,
|
||||
help_text=_("Overrides the default success page text.")
|
||||
)
|
||||
|
||||
class Meta(object):
|
||||
"""Meta class."""
|
||||
"""Meta options."""
|
||||
|
||||
app_label = 'fobi'
|
||||
verbose_name = _("Fobi form")
|
||||
|
|
|
|||
|
|
@ -77,11 +77,17 @@ class AbstractFobiFormPage(Page):
|
|||
:property fobi.models.FormEntry form_entry: Form entry to be rendered.
|
||||
"""
|
||||
|
||||
form_entry = models.ForeignKey('fobi.FormEntry', verbose_name=_("Form"),
|
||||
on_delete=models.PROTECT)
|
||||
form_entry = models.ForeignKey(
|
||||
'fobi.FormEntry',
|
||||
verbose_name=_("Form"),
|
||||
on_delete=models.PROTECT
|
||||
)
|
||||
|
||||
form_template_name = models.CharField(
|
||||
_("Form template name"), max_length=255, null=True, blank=True,
|
||||
_("Form template name"),
|
||||
max_length=255,
|
||||
null=True,
|
||||
blank=True,
|
||||
choices=get_form_template_choices(),
|
||||
help_text=_(
|
||||
"Choose an alternative template to render the form with. Leave "
|
||||
|
|
@ -91,22 +97,32 @@ class AbstractFobiFormPage(Page):
|
|||
)
|
||||
|
||||
hide_form_title = models.BooleanField(
|
||||
_("Hide form title"), default=False,
|
||||
_("Hide form title"),
|
||||
default=False,
|
||||
help_text=_("If checked, no form title is shown.")
|
||||
)
|
||||
|
||||
form_title = models.CharField(
|
||||
_("Form title"), max_length=255, null=True, blank=True,
|
||||
_("Form title"),
|
||||
max_length=255,
|
||||
null=True,
|
||||
blank=True,
|
||||
help_text=_("Overrides the default form title.")
|
||||
)
|
||||
|
||||
form_submit_button_text = models.CharField(
|
||||
_("Submit button text"), max_length=255, null=True, blank=True,
|
||||
_("Submit button text"),
|
||||
max_length=255,
|
||||
null=True,
|
||||
blank=True,
|
||||
help_text=_("Overrides the default form submit button text.")
|
||||
)
|
||||
|
||||
success_page_template_name = models.CharField(
|
||||
_("Success page template name"), max_length=255, null=True, blank=True,
|
||||
_("Success page template name"),
|
||||
max_length=255,
|
||||
null=True,
|
||||
blank=True,
|
||||
choices=get_success_page_template_choices(),
|
||||
help_text=_(
|
||||
"Choose an alternative template to render the success page with. "
|
||||
|
|
@ -116,17 +132,23 @@ class AbstractFobiFormPage(Page):
|
|||
)
|
||||
|
||||
hide_success_page_title = models.BooleanField(
|
||||
_("Hide success page title"), default=False,
|
||||
_("Hide success page title"),
|
||||
default=False,
|
||||
help_text=_("If checked, no success page title is shown.")
|
||||
)
|
||||
|
||||
success_page_title = models.CharField(
|
||||
_("Success page title"), max_length=255, null=True, blank=True,
|
||||
_("Success page title"),
|
||||
max_length=255,
|
||||
null=True,
|
||||
blank=True,
|
||||
help_text=_("Overrides the default success page title.")
|
||||
)
|
||||
|
||||
success_page_text = models.TextField(
|
||||
_("Success page text"), null=True, blank=True,
|
||||
_("Success page text"),
|
||||
null=True,
|
||||
blank=True,
|
||||
help_text=_("Overrides the default success page text.")
|
||||
)
|
||||
|
||||
|
|
@ -160,7 +182,7 @@ class AbstractFobiFormPage(Page):
|
|||
]
|
||||
|
||||
class Meta(object):
|
||||
"""Meta class."""
|
||||
"""Meta options."""
|
||||
|
||||
verbose_name = _('Fobi form page')
|
||||
verbose_name_plural = _('Fobi form pages')
|
||||
|
|
@ -223,5 +245,7 @@ class AbstractFobiFormPage(Page):
|
|||
fobi_form_processor.show_thanks_page(request, self)
|
||||
)
|
||||
else:
|
||||
return super(AbstractFobiFormPage, self).serve_preview(request,
|
||||
mode)
|
||||
return super(AbstractFobiFormPage, self).serve_preview(
|
||||
request,
|
||||
mode
|
||||
)
|
||||
|
|
|
|||
|
|
@ -1,14 +1,20 @@
|
|||
from __future__ import absolute_import
|
||||
|
||||
from django.forms.extras.widgets import SelectDateWidget
|
||||
from django.forms.fields import DateField
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
from nine import versions
|
||||
|
||||
from fobi.base import FormFieldPlugin, get_theme
|
||||
|
||||
from . import UID
|
||||
from .forms import DateDropDownInputForm
|
||||
|
||||
if versions.DJANGO_LTE_1_11:
|
||||
from django.forms.extras.widgets import SelectDateWidget
|
||||
else:
|
||||
from django.forms.widgets import SelectDateWidget
|
||||
|
||||
__title__ = 'fobi.contrib.plugins.form_elements.fields.' \
|
||||
'date_drop_down.base'
|
||||
__author__ = 'Artur Barseghyan <artur.barseghyan@gmail.com>'
|
||||
|
|
|
|||
|
|
@ -27,10 +27,12 @@ class Migration(migrations.Migration):
|
|||
('form_entry', models.ForeignKey(verbose_name='Form',
|
||||
blank=True,
|
||||
to='fobi.FormEntry',
|
||||
null=True)),
|
||||
null=True,
|
||||
on_delete=models.CASCADE)),
|
||||
('user', models.ForeignKey(verbose_name='User', blank=True,
|
||||
to=settings.AUTH_USER_MODEL,
|
||||
null=True)),
|
||||
null=True,
|
||||
on_delete=models.CASCADE)),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'Saved form data entry',
|
||||
|
|
|
|||
|
|
@ -31,15 +31,23 @@ AUTH_USER_MODEL = settings.AUTH_USER_MODEL
|
|||
class AbstractSavedFormDataEntry(models.Model):
|
||||
"""Abstract saved form data entry."""
|
||||
|
||||
user = models.ForeignKey(AUTH_USER_MODEL, verbose_name=_("User"),
|
||||
null=True, blank=True)
|
||||
form_data_headers = models.TextField(_("Form data headers"), null=True,
|
||||
blank=True)
|
||||
user = models.ForeignKey(
|
||||
AUTH_USER_MODEL,
|
||||
verbose_name=_("User"),
|
||||
null=True,
|
||||
blank=True,
|
||||
on_delete=models.CASCADE
|
||||
)
|
||||
form_data_headers = models.TextField(
|
||||
_("Form data headers"),
|
||||
null=True,
|
||||
blank=True
|
||||
)
|
||||
saved_data = models.TextField(_("Plugin data"), null=True, blank=True)
|
||||
created = models.DateTimeField(_("Date created"), auto_now_add=True)
|
||||
|
||||
class Meta(object):
|
||||
"""Meta class."""
|
||||
"""Meta options."""
|
||||
|
||||
abstract = True
|
||||
|
||||
|
|
@ -72,11 +80,16 @@ class AbstractSavedFormDataEntry(models.Model):
|
|||
class SavedFormDataEntry(AbstractSavedFormDataEntry):
|
||||
"""Saved form data."""
|
||||
|
||||
form_entry = models.ForeignKey('fobi.FormEntry', verbose_name=_("Form"),
|
||||
null=True, blank=True)
|
||||
form_entry = models.ForeignKey(
|
||||
'fobi.FormEntry',
|
||||
verbose_name=_("Form"),
|
||||
null=True,
|
||||
blank=True,
|
||||
on_delete=models.CASCADE
|
||||
)
|
||||
|
||||
class Meta(object):
|
||||
"""Meta class."""
|
||||
"""Meta options."""
|
||||
|
||||
abstract = False
|
||||
verbose_name = _("Saved form data entry")
|
||||
|
|
@ -92,11 +105,15 @@ class SavedFormWizardDataEntry(AbstractSavedFormDataEntry):
|
|||
"""Saved form data."""
|
||||
|
||||
form_wizard_entry = models.ForeignKey(
|
||||
'fobi.FormWizardEntry', verbose_name=_("Form"), null=True, blank=True
|
||||
'fobi.FormWizardEntry',
|
||||
verbose_name=_("Form"),
|
||||
null=True,
|
||||
blank=True,
|
||||
on_delete=models.CASCADE
|
||||
)
|
||||
|
||||
class Meta(object):
|
||||
"""Meta class."""
|
||||
"""Meta options."""
|
||||
|
||||
abstract = False
|
||||
verbose_name = _("Saved form wizard data entry")
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
from django.core.management.base import BaseCommand
|
||||
|
||||
from nine import versions
|
||||
|
||||
from fobi.utils import sync_plugins
|
||||
|
||||
|
||||
|
|
@ -13,6 +15,17 @@ class Command(BaseCommand):
|
|||
- ``fobi.models.FormHandlerPlugin``
|
||||
"""
|
||||
|
||||
if versions.DJANGO_GTE_2_0:
|
||||
def add_arguments(self, parser):
|
||||
parser.add_argument(
|
||||
'--noinput',
|
||||
'--no-input',
|
||||
action='store_false',
|
||||
dest='interactive',
|
||||
help='Tells Django to NOT prompt the user for input of any '
|
||||
'kind.',
|
||||
)
|
||||
|
||||
def handle(self, *args, **options):
|
||||
"""Handle."""
|
||||
sync_plugins()
|
||||
|
|
|
|||
|
|
@ -70,7 +70,7 @@ class Migration(migrations.Migration):
|
|||
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
||||
('name', models.CharField(max_length=255, verbose_name='Name')),
|
||||
('is_repeatable', models.BooleanField(default=False, help_text='Makes your form fieldset repeatable.', verbose_name='Is repeatable?')),
|
||||
('form_entry', models.ForeignKey(verbose_name='Form', blank=True, to='fobi.FormEntry', null=True)),
|
||||
('form_entry', models.ForeignKey(verbose_name='Form', blank=True, to='fobi.FormEntry', null=True, on_delete=models.CASCADE)),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'Form fieldset entry',
|
||||
|
|
@ -97,7 +97,7 @@ class Migration(migrations.Migration):
|
|||
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
||||
('plugin_data', models.TextField(null=True, verbose_name='Plugin data', blank=True)),
|
||||
('plugin_uid', models.CharField(max_length=255, verbose_name='Plugin name', choices=[(b'db_store', b'DB store'), (b'mail', b'Mail'), (b'http_repost', b'HTTP Repost')])),
|
||||
('form_entry', models.ForeignKey(verbose_name='Form', to='fobi.FormEntry')),
|
||||
('form_entry', models.ForeignKey(verbose_name='Form', to='fobi.FormEntry', on_delete=models.CASCADE)),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
|
|
@ -113,7 +113,7 @@ class Migration(migrations.Migration):
|
|||
('slug', autoslug.fields.AutoSlugField(verbose_name='Slug', unique=True, editable=False)),
|
||||
('is_public', models.BooleanField(default=False, help_text='Makes your form wizard visible to the public.', verbose_name='Is public?')),
|
||||
('is_cloneable', models.BooleanField(default=False, help_text='Makes your form wizard cloneable by other users.', verbose_name='Is cloneable?')),
|
||||
('user', models.ForeignKey(verbose_name='User', to=settings.AUTH_USER_MODEL)),
|
||||
('user', models.ForeignKey(verbose_name='User', to=settings.AUTH_USER_MODEL, on_delete=models.CASCADE)),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'Form wizard entry',
|
||||
|
|
@ -123,22 +123,22 @@ class Migration(migrations.Migration):
|
|||
migrations.AddField(
|
||||
model_name='formentry',
|
||||
name='form_wizard_entry',
|
||||
field=models.ForeignKey(verbose_name='Form wizard', blank=True, to='fobi.FormWizardEntry', null=True),
|
||||
field=models.ForeignKey(verbose_name='Form wizard', blank=True, to='fobi.FormWizardEntry', null=True, on_delete=models.CASCADE),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='formentry',
|
||||
name='user',
|
||||
field=models.ForeignKey(verbose_name='User', to=settings.AUTH_USER_MODEL),
|
||||
field=models.ForeignKey(verbose_name='User', to=settings.AUTH_USER_MODEL, on_delete=models.CASCADE),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='formelemententry',
|
||||
name='form_entry',
|
||||
field=models.ForeignKey(verbose_name='Form', to='fobi.FormEntry'),
|
||||
field=models.ForeignKey(verbose_name='Form', to='fobi.FormEntry', on_delete=models.CASCADE),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='formelemententry',
|
||||
name='form_fieldset_entry',
|
||||
field=models.ForeignKey(verbose_name='Form fieldset', blank=True, to='fobi.FormFieldsetEntry', null=True),
|
||||
field=models.ForeignKey(verbose_name='Form fieldset', blank=True, to='fobi.FormFieldsetEntry', null=True, on_delete=models.CASCADE),
|
||||
),
|
||||
migrations.AlterUniqueTogether(
|
||||
name='formwizardentry',
|
||||
|
|
|
|||
|
|
@ -260,33 +260,52 @@ class FormWizardHandler(AbstractPluginModel):
|
|||
class FormWizardEntry(models.Model):
|
||||
"""Form wizard entry."""
|
||||
|
||||
user = models.ForeignKey(AUTH_USER_MODEL, verbose_name=_("User"))
|
||||
user = models.ForeignKey(
|
||||
AUTH_USER_MODEL,
|
||||
verbose_name=_("User"),
|
||||
on_delete=models.CASCADE
|
||||
)
|
||||
name = models.CharField(_("Name"), max_length=255)
|
||||
title = models.CharField(_("Title"), max_length=255, null=True,
|
||||
blank=True, help_text=_("Shown in templates if "
|
||||
"available."))
|
||||
slug = AutoSlugField(populate_from='name', verbose_name=_("Slug"),
|
||||
unique=True)
|
||||
title = models.CharField(
|
||||
_("Title"),
|
||||
max_length=255,
|
||||
null=True,
|
||||
blank=True,
|
||||
help_text=_("Shown in templates if available.")
|
||||
)
|
||||
slug = AutoSlugField(
|
||||
populate_from='name',
|
||||
verbose_name=_("Slug"),
|
||||
unique=True
|
||||
)
|
||||
is_public = models.BooleanField(
|
||||
_("Is public?"), default=False,
|
||||
_("Is public?"),
|
||||
default=False,
|
||||
help_text=_("Makes your form wizard visible to the public.")
|
||||
)
|
||||
is_cloneable = models.BooleanField(
|
||||
_("Is cloneable?"), default=False,
|
||||
_("Is cloneable?"),
|
||||
default=False,
|
||||
help_text=_("Makes your form wizard cloneable by other users.")
|
||||
)
|
||||
success_page_title = models.CharField(
|
||||
_("Success page title"), max_length=255, null=True, blank=True,
|
||||
_("Success page title"),
|
||||
max_length=255,
|
||||
null=True,
|
||||
blank=True,
|
||||
help_text=_("Custom message title to display after valid form is "
|
||||
"submitted")
|
||||
)
|
||||
success_page_message = models.TextField(
|
||||
_("Success page body"), null=True, blank=True,
|
||||
_("Success page body"),
|
||||
null=True,
|
||||
blank=True,
|
||||
help_text=_("Custom message text to display after valid form is "
|
||||
"submitted")
|
||||
)
|
||||
show_all_navigation_buttons = models.BooleanField(
|
||||
_("Show all navigation buttons?"), default=False,
|
||||
_("Show all navigation buttons?"),
|
||||
default=False,
|
||||
help_text=_("Show all navigation buttons.")
|
||||
)
|
||||
# action = models.CharField(
|
||||
|
|
@ -295,14 +314,26 @@ class FormWizardEntry(models.Model):
|
|||
# "really necessary.")
|
||||
# )
|
||||
wizard_type = models.CharField(
|
||||
_("Type"), max_length=255, null=False, blank=False,
|
||||
choices=WIZARD_TYPES, default=DEFAULT_WIZARD_TYPE,
|
||||
_("Type"),
|
||||
max_length=255,
|
||||
null=False,
|
||||
blank=False,
|
||||
choices=WIZARD_TYPES,
|
||||
default=DEFAULT_WIZARD_TYPE,
|
||||
help_text=_("Type of the form wizard.")
|
||||
)
|
||||
created = models.DateTimeField(_("Created"), null=True, blank=True,
|
||||
auto_now_add=True)
|
||||
updated = models.DateTimeField(_("Updated"), null=True, blank=True,
|
||||
auto_now=True)
|
||||
created = models.DateTimeField(
|
||||
_("Created"),
|
||||
null=True,
|
||||
blank=True,
|
||||
auto_now_add=True
|
||||
)
|
||||
updated = models.DateTimeField(
|
||||
_("Updated"),
|
||||
null=True,
|
||||
blank=True,
|
||||
auto_now=True
|
||||
)
|
||||
|
||||
class Meta(object):
|
||||
"""Meta class."""
|
||||
|
|
@ -343,44 +374,70 @@ class FormEntry(models.Model):
|
|||
- `position` (int): Ordering position in the wizard.
|
||||
"""
|
||||
|
||||
user = models.ForeignKey(AUTH_USER_MODEL, verbose_name=_("User"))
|
||||
user = models.ForeignKey(
|
||||
AUTH_USER_MODEL,
|
||||
verbose_name=_("User"),
|
||||
on_delete=models.CASCADE
|
||||
)
|
||||
name = models.CharField(_("Name"), max_length=255)
|
||||
title = models.CharField(_("Title"), max_length=255, null=True,
|
||||
blank=True, help_text=_("Shown in templates if "
|
||||
"available."))
|
||||
title = models.CharField(
|
||||
_("Title"),
|
||||
max_length=255,
|
||||
null=True,
|
||||
blank=True,
|
||||
help_text=_("Shown in templates if available.")
|
||||
)
|
||||
slug = AutoSlugField(
|
||||
populate_from='name', verbose_name=_("Slug"), unique=True
|
||||
)
|
||||
is_public = models.BooleanField(
|
||||
_("Public?"), default=False,
|
||||
_("Public?"),
|
||||
default=False,
|
||||
help_text=_("Makes your form visible to the public.")
|
||||
)
|
||||
is_cloneable = models.BooleanField(
|
||||
_("Cloneable?"), default=False,
|
||||
_("Cloneable?"),
|
||||
default=False,
|
||||
help_text=_("Makes your form cloneable by other users.")
|
||||
)
|
||||
# position = models.PositiveIntegerField(
|
||||
# _("Position"), null=True, blank=True
|
||||
# )
|
||||
success_page_title = models.CharField(
|
||||
_("Success page title"), max_length=255, null=True, blank=True,
|
||||
_("Success page title"),
|
||||
max_length=255,
|
||||
null=True,
|
||||
blank=True,
|
||||
help_text=_("Custom message title to display after valid form is "
|
||||
"submitted")
|
||||
)
|
||||
success_page_message = models.TextField(
|
||||
_("Success page body"), null=True, blank=True,
|
||||
_("Success page body"),
|
||||
null=True,
|
||||
blank=True,
|
||||
help_text=_("Custom message text to display after valid form is "
|
||||
"submitted")
|
||||
)
|
||||
action = models.CharField(
|
||||
_("Action"), max_length=255, null=True, blank=True,
|
||||
_("Action"),
|
||||
max_length=255,
|
||||
null=True,
|
||||
blank=True,
|
||||
help_text=_("Custom form action; don't fill this field, unless really "
|
||||
"necessary.")
|
||||
)
|
||||
created = models.DateTimeField(_("Created"), null=True, blank=True,
|
||||
auto_now_add=True)
|
||||
updated = models.DateTimeField(_("Updated"), null=True, blank=True,
|
||||
auto_now=True)
|
||||
created = models.DateTimeField(
|
||||
_("Created"),
|
||||
null=True,
|
||||
blank=True,
|
||||
auto_now_add=True
|
||||
)
|
||||
updated = models.DateTimeField(
|
||||
_("Updated"),
|
||||
null=True,
|
||||
blank=True,
|
||||
auto_now=True
|
||||
)
|
||||
|
||||
class Meta(object):
|
||||
"""Meta class."""
|
||||
|
|
@ -411,14 +468,25 @@ class FormWizardFormEntry(models.Model):
|
|||
|
||||
A coupling point between `FormWizardEntry` and `FormEntry`."""
|
||||
|
||||
form_wizard_entry = models.ForeignKey(FormWizardEntry,
|
||||
verbose_name=_("Form wizard entry"),
|
||||
null=False, blank=False)
|
||||
form_entry = models.ForeignKey(FormEntry,
|
||||
verbose_name=_("Form entry"),
|
||||
null=False, blank=False)
|
||||
position = models.PositiveIntegerField(_("Position"), null=True,
|
||||
blank=True)
|
||||
form_wizard_entry = models.ForeignKey(
|
||||
FormWizardEntry,
|
||||
verbose_name=_("Form wizard entry"),
|
||||
null=False,
|
||||
blank=False,
|
||||
on_delete=models.CASCADE
|
||||
)
|
||||
form_entry = models.ForeignKey(
|
||||
FormEntry,
|
||||
verbose_name=_("Form entry"),
|
||||
null=False,
|
||||
blank=False,
|
||||
on_delete=models.CASCADE
|
||||
)
|
||||
position = models.PositiveIntegerField(
|
||||
_("Position"),
|
||||
null=True,
|
||||
blank=True
|
||||
)
|
||||
|
||||
class Meta(object):
|
||||
"""Meta class."""
|
||||
|
|
@ -437,11 +505,17 @@ class FormWizardFormEntry(models.Model):
|
|||
class FormFieldsetEntry(models.Model):
|
||||
"""Form fieldset entry."""
|
||||
|
||||
form_entry = models.ForeignKey(FormEntry, verbose_name=_("Form"),
|
||||
null=True, blank=True)
|
||||
form_entry = models.ForeignKey(
|
||||
FormEntry,
|
||||
verbose_name=_("Form"),
|
||||
null=True,
|
||||
blank=True,
|
||||
on_delete=models.CASCADE
|
||||
)
|
||||
name = models.CharField(_("Name"), max_length=255)
|
||||
is_repeatable = models.BooleanField(
|
||||
_("Is repeatable?"), default=False,
|
||||
_("Is repeatable?"),
|
||||
default=False,
|
||||
help_text=_("Makes your form fieldset repeatable.")
|
||||
)
|
||||
|
||||
|
|
@ -465,8 +539,11 @@ class BaseAbstractPluginEntry(models.Model):
|
|||
- `plugin_data` (str): JSON formatted string with plugin data.
|
||||
"""
|
||||
|
||||
plugin_data = models.TextField(verbose_name=_("Plugin data"), null=True,
|
||||
blank=True)
|
||||
plugin_data = models.TextField(
|
||||
verbose_name=_("Plugin data"),
|
||||
null=True,
|
||||
blank=True
|
||||
)
|
||||
|
||||
class Meta(object):
|
||||
"""Meta class."""
|
||||
|
|
@ -558,7 +635,11 @@ class AbstractPluginEntry(BaseAbstractPluginEntry):
|
|||
- `plugin_data` (str): JSON formatted string with plugin data.
|
||||
"""
|
||||
|
||||
form_entry = models.ForeignKey(FormEntry, verbose_name=_("Form"))
|
||||
form_entry = models.ForeignKey(
|
||||
FormEntry,
|
||||
verbose_name=_("Form"),
|
||||
on_delete=models.CASCADE
|
||||
)
|
||||
|
||||
class Meta(object):
|
||||
"""Meta class."""
|
||||
|
|
@ -596,11 +677,18 @@ class FormElementEntry(AbstractPluginEntry):
|
|||
_("Plugin name"), max_length=255,
|
||||
# choices=get_registered_form_element_plugins()
|
||||
)
|
||||
form_fieldset_entry = models.ForeignKey(FormFieldsetEntry,
|
||||
verbose_name=_("Form fieldset"),
|
||||
null=True, blank=True)
|
||||
position = models.PositiveIntegerField(_("Position"), null=True,
|
||||
blank=True)
|
||||
form_fieldset_entry = models.ForeignKey(
|
||||
FormFieldsetEntry,
|
||||
verbose_name=_("Form fieldset"),
|
||||
null=True,
|
||||
blank=True,
|
||||
on_delete=models.CASCADE
|
||||
)
|
||||
position = models.PositiveIntegerField(
|
||||
_("Position"),
|
||||
null=True,
|
||||
blank=True
|
||||
)
|
||||
|
||||
class Meta(object):
|
||||
"""Meta class."""
|
||||
|
|
@ -631,7 +719,8 @@ class FormHandlerEntry(AbstractPluginEntry):
|
|||
"""
|
||||
|
||||
plugin_uid = models.CharField(
|
||||
_("Plugin name"), max_length=255,
|
||||
_("Plugin name"),
|
||||
max_length=255,
|
||||
# choices=get_registered_form_handler_plugins()
|
||||
)
|
||||
|
||||
|
|
@ -662,8 +751,11 @@ class AbstractFormWizardPluginEntry(BaseAbstractPluginEntry):
|
|||
- `plugin_data` (str): JSON formatted string with plugin data.
|
||||
"""
|
||||
|
||||
form_wizard_entry = models.ForeignKey(FormWizardEntry,
|
||||
verbose_name=_("Form wizard"))
|
||||
form_wizard_entry = models.ForeignKey(
|
||||
FormWizardEntry,
|
||||
verbose_name=_("Form wizard"),
|
||||
on_delete=models.CASCADE
|
||||
)
|
||||
|
||||
class Meta(object):
|
||||
"""Meta class."""
|
||||
|
|
@ -688,7 +780,8 @@ class FormWizardHandlerEntry(AbstractFormWizardPluginEntry):
|
|||
"""
|
||||
|
||||
plugin_uid = models.CharField(
|
||||
_("Plugin name"), max_length=255,
|
||||
_("Plugin name"),
|
||||
max_length=255,
|
||||
# choices=get_registered_form_handler_plugins()
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ from collections import OrderedDict
|
|||
import datetime
|
||||
# from decimal import Decimal
|
||||
|
||||
from django.utils.text import force_text
|
||||
from django.utils.encoding import force_text
|
||||
|
||||
from faker import Faker
|
||||
|
||||
|
|
|
|||
|
|
@ -1,3 +1,7 @@
|
|||
from django.conf import settings
|
||||
|
||||
from nine import versions
|
||||
|
||||
import requests
|
||||
|
||||
from requests.exceptions import (
|
||||
|
|
@ -9,8 +13,10 @@ from requests.exceptions import (
|
|||
RetryError
|
||||
)
|
||||
|
||||
from django.conf import settings
|
||||
from django.core.urlresolvers import resolve, Resolver404
|
||||
if versions.DJANGO_LTE_1_11:
|
||||
from django.core.urlresolvers import resolve, Resolver404
|
||||
else:
|
||||
from django.urls import resolve, Resolver404
|
||||
|
||||
try:
|
||||
from localeurl.utils import strip_path
|
||||
|
|
|
|||
Loading…
Reference in a new issue