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

Django Crispy Form With Dynamically Defined Field

我想用两个静态定义的字段(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 的使用上。如果我修改我的示例如下:

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 class?

时,有什么方法可以正确呈现动态定义的字段

在创建 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'))