簡體   English   中英

Django:如何更改內聯Formset中的字段小部件

[英]Django: How to change a field widget in a Inline Formset

我是Django的新手,我想我在文檔中遺漏了這個。
問題是在inline-formset中我沒有聲明一個表單,只需傳遞兩個模型來構造它。
我想知道如何使用內聯formset更改單個字段的窗口小部件?

從Django 1.6開始 ,您可以使用modelformset_factorywidgets參數來自定義特定字段的窗口小部件:

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

並且因此對於相同的參數inlineformset_factory (使用modelformset_factory ):

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

這是使用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)

您需要在Meta類中定義表單和更新小部件。 查看覆蓋默認字段類型或小部件

您可以子類化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())

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM