为什么在使用 RadioSelect 小部件时必须在 ModelForm 中手动设置选项
Why do I have to set the choices manually in a ModelForm when using RadioSelect widget
我有一个带有 CharField 的模型,该模型已分配了选项。我想使用 RadioSelect() 小部件在 ModelForm 中显示此字段。
如果我在 ModelForm 的 Meta class 中为字段设置小部件,小部件将正确显示,所有选项都作为单选按钮。 (哇!)
class Meta:
model = Account
fields = (
'newsletter_setting',
)
widgets = {
'newsletter_setting': forms.RadioSelect()
}
但是如果我尝试在 __init__
方法上设置小部件,则无法选择小部件。
def __init__(self, *args, **kwargs):
super(AccountEditForm, self).__init__(*args, **kwargs)
self.fields['newsletter_setting'].widget = forms.RadioSelect()
这是为什么?
您需要重新填充新创建的 RadioSelect
的 choices
属性:
def __init__(self, *args, **kwargs):
super(AccountEditForm, self).__init__(*args, **kwargs)
self.fields['newsletter_setting'].widget = forms.RadioSelect(
choices=self.fields['newsletter_setting'].widget.choices)
我有一个带有 CharField 的模型,该模型已分配了选项。我想使用 RadioSelect() 小部件在 ModelForm 中显示此字段。
如果我在 ModelForm 的 Meta class 中为字段设置小部件,小部件将正确显示,所有选项都作为单选按钮。 (哇!)
class Meta:
model = Account
fields = (
'newsletter_setting',
)
widgets = {
'newsletter_setting': forms.RadioSelect()
}
但是如果我尝试在 __init__
方法上设置小部件,则无法选择小部件。
def __init__(self, *args, **kwargs):
super(AccountEditForm, self).__init__(*args, **kwargs)
self.fields['newsletter_setting'].widget = forms.RadioSelect()
这是为什么?
您需要重新填充新创建的 RadioSelect
的 choices
属性:
def __init__(self, *args, **kwargs):
super(AccountEditForm, self).__init__(*args, **kwargs)
self.fields['newsletter_setting'].widget = forms.RadioSelect(
choices=self.fields['newsletter_setting'].widget.choices)