【问题标题】:Django Crispy Form With Dynamically Defined Field具有动态定义字段的 Django Crispy 表单
【发布时间】:2020-06-02 22:49:59
【问题描述】:

我想定义一个带有两个静态定义字段(namedescription)和一个动态定义字段(enum_value)的 Django 脆表单。我是这样做的:

class DataTypeForm(forms.Form):
    name = forms.CharField()
    description = forms.CharField(widget=forms.Textarea)

    def __init__(self, *args, **kwargs):
        self.mode = kwargs.pop('mode')
        super(DataTypeForm, self).__init__(*args, **kwargs)
        self.helper = FormHelper(self)
        self.helper.wrapper_class = 'row'
        self.helper.label_class = 'col-md-2'
        self.helper.field_class = 'col-md-8'
        self.helper.add_input(Submit('submit', 'Submit'))
        self.fields['enum_value'] = forms.CharField()

动态字段enum_value 在最后一行定义。不幸的是,这并没有按预期工作:表单使用两个静态字段(namedescription)呈现,但动态字段 enum_value 不可见。问题似乎在于FormHelper 类的使用。如果我将示例修改如下:

class DataTypeForm(forms.Form):
    name = forms.CharField()
    description = forms.CharField(widget=forms.Textarea)

    def __init__(self, *args, **kwargs):
        self.mode = kwargs.pop('mode')
        super(DataTypeForm, self).__init__(*args, **kwargs)
#        self.helper = FormHelper(self)
#        self.helper.wrapper_class = 'row'
#        self.helper.label_class = 'col-md-2'
#        self.helper.field_class = 'col-md-8'
#        self.helper.add_input(Submit('submit', 'Submit'))
        self.fields['enum_value'] = forms.CharField()

然后,事情按预期工作,我的表单中的所有三个字段都正确呈现。即使使用FormHelper 类,有什么方法可以正确呈现动态定义的字段吗?

【问题讨论】:

    标签: django-forms django-crispy-forms


    【解决方案1】:

    在创建FormHelper 之前放置动态字段enum_value 应该可以工作。

    class DataTypeForm(forms.Form):
        name = forms.CharField()
        description = forms.CharField(widget=forms.Textarea)
    
        def __init__(self, *args, **kwargs):
            self.mode = kwargs.pop('mode')
            super(DataTypeForm, self).__init__(*args, **kwargs)
            self.fields['enum_value'] = forms.CharField()
            self.helper = FormHelper(self)
            self.helper.wrapper_class = 'row'
            self.helper.label_class = 'col-md-2'
            self.helper.field_class = 'col-md-8'
            self.helper.add_input(Submit('submit', 'Submit'))
    

    【讨论】:

    • 是的,我确认建议的解决方案有效!非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2019-12-31
    • 2013-07-21
    • 2013-01-08
    • 2011-07-25
    • 2011-09-22
    • 2014-12-21
    相关资源
    最近更新 更多