Django:如何更改内联Formset中的字段小部件

时间:2012-08-21 12:21:41

标签: python django forms inline-formset

我是Django的新手,我想我在文档中忽略了这一点。
问题是在inline-formset中我没有声明一个表单,只需传递两个模型来构造它。
我想知道如何使用内联formset更改单个字段的窗口小部件?

4 个答案:

答案 0 :(得分:15)

As of Django 1.6,您可以使用widgets的{​​{1}}参数来自定义特定字段的小部件:

modelformset_factory

therefore AuthorFormSet = modelformset_factory(Author, widgets={ 'name': Textarea(attrs={'cols': 80, 'rows': 20}) }) 的相同参数(使用inlineformset_factory):

modelformset_factory

答案 1 :(得分:6)

这是使用formfield_callback自定义一个字段的示例:

def formfield_callback(field):
    if isinstance(field, models.ChoiceField) and field.name == 'target_field_name':
        return fields.ChoiceField(choices = SAMPLE_CHOICES_LIST, label='Sample Label')
    return field.formfield()

FormSet = inlineformset_factory(ModelA, ModelB, extra=1, formfield_callback = formfield_callback)

答案 2 :(得分:3)

您需要在Meta类中定义表单和更新小部件。看Overriding the default field types or widgets

答案 3 :(得分:2)

您可以继承formset并覆盖add_fields方法。这对我有用,我正在使用Django 1.5 :(。

AuthorInlineFormSet = inlineformset_factory(Author, Book)
class AuthorFormSet(AuthorInlineFormSet):
        def add_fields(self, form, index):
            super(ReferenceForm,self).add_fields(form,index)
            form.fields["name"] = forms.CharField(widget=forms.TextInput())