コード例 #1
0
ファイル: models.py プロジェクト: b-dev/django-form-designer
    def get_form_field_init_args(self):
        args = {
            "required": self.required,
            "label": self.label if self.label else "",
            "initial": self.initial if self.initial else None,
            "help_text": self.help_text,
        }

        if self.field_class in ("django.forms.CharField", "django.forms.EmailField", "django.forms.RegexField"):
            args.update({"max_length": self.max_length, "min_length": self.min_length})

        if self.field_class in ("django.forms.IntegerField", "django.forms.DecimalField"):
            args.update(
                {
                    "max_value": int(self.max_value) if self.max_value != None else None,
                    "min_value": int(self.min_value) if self.min_value != None else None,
                }
            )

        if self.field_class == "django.forms.DecimalField":
            args.update(
                {
                    "max_value": Decimal(str(self.max_value)),
                    "min_value": Decimal(str(self.min_value)),
                    "max_digits": self.max_digits,
                    "decimal_places": self.decimal_places,
                }
            )

        if self.field_class == "django.forms.RegexField":
            if self.regex:
                args.update({"regex": self.regex})

        if self.field_class in ("django.forms.ChoiceField", "django.forms.MultipleChoiceField"):
            if self.choice_values:
                choices = []
                regex = re.compile("[\s]*\n[\s]*")
                values = regex.split(self.choice_values)
                labels = regex.split(self.choice_labels) if self.choice_labels else []
                for index, value in enumerate(values):
                    try:
                        label = labels[index]
                    except:
                        label = value
                    choices.append((value, label))
                args.update({"choices": tuple(choices)})

        if self.field_class in ("django.forms.ModelChoiceField", "django.forms.ModelMultipleChoiceField"):
            args.update({"queryset": ModelNameField.get_model_from_string(self.choice_model).objects.all()})

        if self.field_class == "django.forms.ModelChoiceField":
            args.update({"empty_label": self.choice_model_empty_label})

        if self.widget:
            args.update({"widget": get_class(self.widget)()})

        return args
コード例 #2
0
ファイル: models.py プロジェクト: 7mp/django-form-designer
    def get_form_field_init_args(self):
        args = {
            'required': self.required,
            'label': self.label if self.label else '',
            'initial': self.initial if self.initial else None,
            'help_text': self.help_text,
        }

        if self.field_class in ('django.forms.CharField', 'django.forms.EmailField', 'django.forms.RegexField'):
            args.update({
                'max_length': self.max_length,
                'min_length': self.min_length,
            })

        if self.field_class in ('django.forms.IntegerField', 'django.forms.DecimalField'):
            args.update({
                'max_value': int(self.max_value) if self.max_value != None else None,
                'min_value': int(self.min_value) if self.min_value != None else None,
            })

        if self.field_class == 'django.forms.DecimalField':
            args.update({
                'max_value': Decimal(str(self.max_value)),
                'min_value': Decimal(str(self.min_value)),
                'max_digits': self.max_digits,
                'decimal_places': self.decimal_places,
            })

        if self.field_class == 'django.forms.RegexField':
            if self.regex:
                args.update({
                    'regex': self.regex
                })

        if self.field_class in ('django.forms.ChoiceField', 'django.forms.MultipleChoiceField'):
            if self.choice_values:
                choices = []
                regex = re.compile('[\s]*\n[\s]*')
                values = regex.split(self.choice_values)
                labels = regex.split(self.choice_labels) if self.choice_labels else []
                for index, value in enumerate(values):
                    try:
                        label = labels[index]
                    except:
                        label = value
                    choices.append((value, label))
                args.update({
                    'choices': tuple(choices)
                })

        if self.field_class in ('django.forms.ModelChoiceField', 'django.forms.ModelMultipleChoiceField'):
            args.update({
                'queryset': ModelNameField.get_model_from_string(self.choice_model).objects.all()
            })

        if self.field_class == 'django.forms.ModelChoiceField':
            args.update({
                'empty_label': self.choice_model_empty_label
            })

        if self.widget:
            args.update({
                'widget': get_class(self.widget)()
            })

        return args
コード例 #3
0
    def get_form_field_init_args(self):
        args = {
            'required': self.required,
            'label': self.label if self.label else '',
            'initial': self.initial if self.initial else None,
            'help_text': self.help_text,
        }

        if self.field_class in ('django.forms.CharField',
                                'django.forms.EmailField',
                                'django.forms.RegexField'):
            args.update({
                'max_length': self.max_length,
                'min_length': self.min_length,
            })

        if self.field_class in ('django.forms.IntegerField',
                                'django.forms.DecimalField'):
            args.update({
                'max_value':
                int(self.max_value) if self.max_value != None else None,
                'min_value':
                int(self.min_value) if self.min_value != None else None,
            })

        if self.field_class == 'django.forms.DecimalField':
            args.update({
                'max_value':
                Decimal(str(self.max_value))
                if self.max_value != None else None,
                'min_value':
                Decimal(str(self.min_value))
                if self.max_value != None else None,
                'max_digits':
                self.max_digits,
                'decimal_places':
                self.decimal_places,
            })

        if self.field_class == 'django.forms.RegexField':
            if self.regex:
                args.update({'regex': self.regex})

        if self.field_class in ('django.forms.ChoiceField',
                                'django.forms.MultipleChoiceField'):
            if self.choice_values:
                choices = []
                regex = re.compile('[\s]*\n[\s]*')
                values = regex.split(self.choice_values)
                labels = regex.split(
                    self.choice_labels) if self.choice_labels else []
                for index, value in enumerate(values):
                    try:
                        label = labels[index]
                    except:
                        label = value
                    choices.append((value, label))
                args.update({'choices': tuple(choices)})

        if self.field_class in ('django.forms.ModelChoiceField',
                                'django.forms.ModelMultipleChoiceField'):
            args.update({
                'queryset':
                ModelNameField.get_model_from_string(
                    self.choice_model).objects.all()
            })

        if self.field_class == 'django.forms.ModelChoiceField':
            args.update({'empty_label': self.choice_model_empty_label})

        if self.widget:
            args.update({'widget': get_class(self.widget)()})

        return args
コード例 #4
0
class FormDefinitionField(models.Model):

    form_definition = models.ForeignKey(FormDefinition)
    field_class = models.CharField(_('field class'),
                                   choices=settings.FIELD_CLASSES,
                                   max_length=100)
    position = models.IntegerField(_('position'), blank=True, null=True)

    name = models.SlugField(_('name'), max_length=255)
    label = models.CharField(_('label'), max_length=255, blank=True, null=True)
    required = models.BooleanField(_('required'), default=True)
    include_result = models.BooleanField(
        _('include in result'),
        help_text=
        ('If this is disabled, the field value will not be included in logs and e-mails generated from form data.'
         ),
        default=True)
    widget = models.CharField(_('widget'),
                              default='',
                              choices=settings.WIDGET_CLASSES,
                              max_length=255,
                              blank=True,
                              null=True)
    initial = models.TextField(_('initial value'), blank=True, null=True)
    help_text = models.CharField(_('help text'),
                                 max_length=255,
                                 blank=True,
                                 null=True)

    choice_values = models.TextField(_('values'),
                                     help_text=_('One value per line'),
                                     blank=True,
                                     null=True)
    choice_labels = models.TextField(_('labels'),
                                     help_text=_('One label per line'),
                                     blank=True,
                                     null=True)

    max_length = models.IntegerField(_('max. length'), blank=True, null=True)
    min_length = models.IntegerField(_('min. length'), blank=True, null=True)
    max_value = models.FloatField(_('max. value'), blank=True, null=True)
    min_value = models.FloatField(_('min. value'), blank=True, null=True)
    max_digits = models.IntegerField(_('max. digits'), blank=True, null=True)
    decimal_places = models.IntegerField(_('decimal places'),
                                         blank=True,
                                         null=True)

    regex = RegexpExpressionField(_('regular Expression'),
                                  max_length=255,
                                  blank=True,
                                  null=True)

    choice_model_choices = settings.CHOICE_MODEL_CHOICES
    choice_model = ModelNameField(
        _('data model'),
        max_length=255,
        blank=True,
        null=True,
        choices=choice_model_choices,
        help_text=('your_app.models.ModelName'
                   if not choice_model_choices else None))
    choice_model_empty_label = models.CharField(_('empty label'),
                                                max_length=255,
                                                blank=True,
                                                null=True)

    class Meta:
        verbose_name = _('field')
        verbose_name_plural = _('fields')
        ordering = ['position']

    def save(self, *args, **kwargs):
        if self.position == None:
            self.position = 0
        super(FormDefinitionField, self).save(*args, **kwargs)

    def ____init__(self,
                   field_class=None,
                   name=None,
                   required=None,
                   widget=None,
                   label=None,
                   initial=None,
                   help_text=None,
                   *args,
                   **kwargs):
        super(FormDefinitionField, self).__init__(*args, **kwargs)
        self.name = name
        self.field_class = field_class
        self.required = required
        self.widget = widget
        self.label = label
        self.initial = initial
        self.help_text = help_text

    def get_form_field_init_args(self):
        args = {
            'required': self.required,
            'label': self.label if self.label else '',
            'initial': self.initial if self.initial else None,
            'help_text': self.help_text,
        }

        if self.field_class in ('django.forms.CharField',
                                'django.forms.EmailField',
                                'django.forms.RegexField'):
            args.update({
                'max_length': self.max_length,
                'min_length': self.min_length,
            })

        if self.field_class in ('django.forms.IntegerField',
                                'django.forms.DecimalField'):
            args.update({
                'max_value':
                int(self.max_value) if self.max_value != None else None,
                'min_value':
                int(self.min_value) if self.min_value != None else None,
            })

        if self.field_class == 'django.forms.DecimalField':
            args.update({
                'max_value':
                Decimal(str(self.max_value))
                if self.max_value != None else None,
                'min_value':
                Decimal(str(self.min_value))
                if self.max_value != None else None,
                'max_digits':
                self.max_digits,
                'decimal_places':
                self.decimal_places,
            })

        if self.field_class == 'django.forms.RegexField':
            if self.regex:
                args.update({'regex': self.regex})

        if self.field_class in ('django.forms.ChoiceField',
                                'django.forms.MultipleChoiceField'):
            if self.choice_values:
                choices = []
                regex = re.compile('[\s]*\n[\s]*')
                values = regex.split(self.choice_values)
                labels = regex.split(
                    self.choice_labels) if self.choice_labels else []
                for index, value in enumerate(values):
                    try:
                        label = labels[index]
                    except:
                        label = value
                    choices.append((value, label))
                args.update({'choices': tuple(choices)})

        if self.field_class in ('django.forms.ModelChoiceField',
                                'django.forms.ModelMultipleChoiceField'):
            args.update({
                'queryset':
                ModelNameField.get_model_from_string(
                    self.choice_model).objects.all()
            })

        if self.field_class == 'django.forms.ModelChoiceField':
            args.update({'empty_label': self.choice_model_empty_label})

        if self.widget:
            args.update({'widget': get_class(self.widget)()})

        return args

    def __unicode__(self):
        return self.label if self.label else self.name
コード例 #5
0
    def get_form_field_init_args(self):
        args = {
            'required': self.required,
            'label': self.label if self.label else '',
            'initial': self.initial if self.initial else None,
            'help_text': self.help_text,
        }

        if self.field_class in ('django.forms.CharField', 'django.forms.EmailField', 'django.forms.RegexField'):
            args.update({
                'max_length': self.max_length,
                'min_length': self.min_length,
            })

        if self.field_class in ('django.forms.IntegerField', 'django.forms.DecimalField'):
            args.update({
                'max_value': int(self.max_value) if self.max_value != None else None,
                'min_value': int(self.min_value) if self.min_value != None else None,
            })

        if self.field_class == 'django.forms.DecimalField':
            args.update({
                'max_value': None if self.max_value == '' or self.max_value is None else Decimal(str(self.max_value)),
                'min_value': None if self.min_value == '' or self.min_value is None else Decimal(str(self.min_value)),
                'max_digits': self.max_digits,
                'decimal_places': self.decimal_places,
            })

        if self.field_class == 'django.forms.RegexField':
            if self.regex:
                args.update({
                    'regex': self.regex
                })

        if self.field_class in ('django.forms.ChoiceField', 'django.forms.MultipleChoiceField'):
            if self.choice_values:
                choices = []
                regex = re.compile('[\s]*\n[\s]*')
                values = regex.split(self.choice_values)
                labels = regex.split(self.choice_labels) if self.choice_labels else []
                for index, value in enumerate(values):
                    try:
                        label = labels[index]
                    except:
                        label = value
                    choices.append((value, label))
                args.update({
                    'choices': tuple(choices)
                })
        
        if getattr(django_settings, 'FORM_DESIGNER_INITIAL_CHOICE_EMPTY', False) \
            and self.field_class == 'django.forms.ChoiceField' \
            and not self.widget:
                choices = list(args['choices'])
                choices.insert(0, ('', _('Please Select...')))
                args['choices'] = choices

        if self.field_class in ('django.forms.ModelChoiceField', 'django.forms.ModelMultipleChoiceField'):
            args.update({
                'queryset': ModelNameField.get_model_from_string(self.choice_model).objects.all()
            })

        if self.field_class == 'django.forms.ModelChoiceField':
            args.update({
                'empty_label': self.choice_model_empty_label
            })

        if self.widget:
            args.update({
                'widget': get_class(self.widget)()
            })

        return args