15

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

4

4 回答 4

20

从 Django 1.6 开始,您可以使用widgets参数 ofmodelformset_factory来自定义特定字段的小部件:

AuthorFormSet = modelformset_factory(Author, widgets={
    'name': Textarea(attrs={'cols': 80, 'rows': 20})
})

因此(使用的相同参数:inlineformset_factorymodelformset_factory

AuthorInlineFormSet = inlineformset_factory(Author, Book, fields=['name'], widgets={
    'name': Textarea(attrs={'cols': 80, 'rows': 20})
})
于 2015-05-12T13:14:46.870 回答
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)
于 2012-08-21T12:58:18.810 回答
3

您需要在Meta类中定义一个表单和更新小部件。查看覆盖默认字段类型或小部件

于 2012-08-21T12:25:43.473 回答
2

您可以子类化表单集并覆盖 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())
于 2015-11-27T20:31:41.283 回答