【问题标题】:Why Django crispy form hidden fields appear?为什么会出现 Django 脆皮表单隐藏字段?
【发布时间】:2017-10-08 03:11:13
【问题描述】:

我有一个模型:

class MyModel(models.Model):
    normal = models.CharField(null=True, blank=True, max_length=100)
    other = models.CharField(null=True, blank=True, max_length=100)
    hidden = models.CharField(null=True, blank=True, max_length=100)

如果我在不使用exclude 的情况下定义常规表单,则隐藏字段会在 DOM(和 UI)中的提交按钮之后显示在 UI 上:

class MyModelForm(forms.ModelForm):
    class Meta:
        model = MyModel
        fields = ('normal', 'hidden')

    def __init__(self, *args, **kwargs):
        super(MyModelForm, self).__init__(*args, **kwargs)

        self.helper = FormHelper(form=self)
        self.helper.form_class = 'form-horizontal'
        self.helper.label_class = 'col-sm-3 col-md-2'
        self.helper.field_class = 'col-sm-9 col-md-10'

        self.helper.layout = Layout(
            'normal',
            Hidden('hidden', 'hidden initial'),
            FormActions(
                Submit('save', 'Save', css_class='save-entry btn-success'),
            )
        )

现在,如果我翻转并组装一个基本等效的表单,但使用 exclude,隐藏字段不会出现(这是我们想要的)。

class MyModelForm(forms.ModelForm):
    class Meta:
        model = MyModel
        exclude = ('other',)

    def __init__(self, *args, **kwargs):
        super(MyModelForm, self).__init__(*args, **kwargs)

        self.helper = FormHelper(form=self)
        self.helper.form_class = 'form-horizontal'
        self.helper.label_class = 'col-sm-3 col-md-2'
        self.helper.field_class = 'col-sm-9 col-md-10'

        self.helper.layout = Layout(
            'normal',
            Hidden('hidden', 'hidden initial'),
            FormActions(
                Submit('save', 'Save', css_class='save-entry btn-success'),
            )
        )

我无法理解为什么会发生这种情况。

【问题讨论】:

    标签: django python-2.7 layout django-crispy-forms


    【解决方案1】:

    Hidden 布局用于创建隐藏输入。您可以添加任何Hidden 元素,即使它没有在您的表单中声明。在您的情况下,如果您检查元素,您会看到有一个名为 hidden 的隐藏输入。

    您需要做的不是使用Hidden 布局,而是需要执行以下操作:

    class MyModelForm(forms.ModelForm):
        class Meta:
            model = MyModel
            fields = ('normal', 'hidden',)
    
        def __init__(self, *args, **kwargs):
            super(MyModelForm, self).__init__(*args, **kwargs)
    
            self.helper = FormHelper(form=self)
            self.helper.form_class = 'form-horizontal'
            self.helper.label_class = 'col-sm-3 col-md-2'
            self.helper.field_class = 'col-sm-9 col-md-10'
    
            self.helper.layout = Layout(
                'normal',
                Field('hidden', type='hidden'),
                FormActions(
                    Submit('save', 'Save', css_class='save-entry btn-success'),
                )
            )
    

    【讨论】:

    • 如果您不需要获取/更改字段的值,那么最好将其从表单中排除。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-21
    • 2016-09-27
    • 2014-02-28
    • 2016-12-08
    • 2019-07-27
    • 2014-12-17
    相关资源
    最近更新 更多