具有动态定义字段的Django脆皮表单

问题描述 投票:0回答:1

我想用两个静态定义的字段(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个回答
0
投票

在创建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.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'))
© www.soinside.com 2019 - 2024. All rights reserved.