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

nsb*_*sbm 12 python forms django inline-formset

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

Wto*_*wer 15

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

AuthorFormSet = modelformset_factory(Author, widgets={
    'name': Textarea(attrs={'cols': 80, 'rows': 20})
})
Run Code Online (Sandbox Code Playgroud)

并且因此对于相同的参数inlineformset_factory(使用modelformset_factory):

AuthorInlineFormSet = inlineformset_factory(Author, Book, fields=['name'], widgets={
    'name': Textarea(attrs={'cols': 80, 'rows': 20})
})
Run Code Online (Sandbox Code Playgroud)


Mos*_*faR 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)
Run Code Online (Sandbox Code Playgroud)


Roh*_*han 3

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