1

所以我试图在我的 ModelForm 上的这个字段中添加一个类属性,以允许 Bootstrap 样式:

category = forms.ModelChoiceField(queryset=Category.objects.all())

我试过这个:

category = forms.ModelChoiceField(queryset=Category.objects.all(), widget=forms.ModelChoiceField(attrs={'class':'form-control'}))

并得到这个错误:

TypeError: __init__() missing 1 required positional argument: 'queryset'

我完整的ModelForm:

class NewListingForm(forms.ModelForm):
    class Meta:
        model = Listing
        fields = ["title", "description", "start_price", "image", "category"]


    title = forms.CharField(widget=forms.TextInput(attrs={'autocomplete':'off', 'class':'form-control'}))
    description = forms.CharField(widget=forms.TextInput(attrs={'autocomplete':'off', 'class':'form-control'}))
    start_price = forms.DecimalField(label='Starting Bid Price (£)', widget=forms.NumberInput(attrs={'class':'form-control'}))
    image = forms.URLField(widget=forms.URLInput(attrs={'autocomplete':'off', 'class':'form-control'}))
    category = forms.ModelChoiceField(queryset=Category.objects.all(), widget=forms.ModelChoiceField(attrs={'class':'form-control'}))

(我打算使用 fields = [] labels={} widgets={} 格式,但我不知道如何使用查询集字段来做到这一点)

4

1 回答 1

1

ModelChoiceField是一个表单域,而不是一个小部件

要更新小部件类,您可以按照此方法,

class NewListingForm(forms.ModelForm):
    # rest of your fields
    category = forms.ModelChoiceField(
        queryset=Category.objects.all(),

    )
    category.widget.attrs.update({'class': 'form-control'})

您还可以通过将有效的小部件类指定为来更改 attr

class NewListingForm(forms.ModelForm):
    # rest of your fields
    category = forms.ModelChoiceField(
        queryset=Category.objects.all(),
        widget=forms.Select(attrs={'class': 'form-control'})
        # `ModelChoiceField` is using the `Select` widget bu default

    )

参考

于 2020-10-12T10:34:59.450 回答