我的目标是能够使用get_FOO_display(),因此据我所知,我必须在模型字段中指定选项。同时我想使用ModelForm作为RadioButton渲染表单。
我遇到的问题是在下拉选项中使用的默认值“------”显示为我的RadioButton选项之一。
models.py
class Medication(models.Model):
YESNO_CHOICES = [(0, 'No'), (1, 'Yes')]
Allergies = models.BigIntegerField(verbose_name='Allergies:', choices=YESNO_CHOICES)
forms.py
我试过在ModelForm中指定一个RadioButton小部件。
class mfMedication(ModelForm):
class Meta:
model = Medication
widgets = {
'Allergies': RadioSelect(),
}
并使用CHOICES指定RadioButton。
class mfMedication(ModelForm):
class Meta:
model = Medication
widgets = {
'Allergies': RadioSelect(choices=Medication.YESNO_CHOICES),
}
在这两种情况下,我都会得到三个无线电按钮:
"": -------
0 : No
1 : Yes
我没有得到“-------”的唯一方法是从我的模型字段中删除choices = YESNO_CHOICES,但这会阻止get_FOO_display()停止工作。
我们非常感谢你用来实现这项工作的任何方法。
感谢。 JD。
答案 0 :(得分:8)
如果您想阻止显示-------
选项,请在表单字段中指定empty_label=None
。
此外,我建议您使用BooleanField作为模型,使用TypedChoiceField作为表单:
<强> models.py:强>
class Medication(models.Model):
Allergies = models.BooleanField('Allergies:')
<强> forms.py:强>
class MedicationForm(forms.ModelForm):
YESNO_CHOICES = ((0, 'No'), (1, 'Yes'))
Allergies = forms.TypedChoiceField(
choices=YESNO_CHOICES, widget=forms.RadioSelect, coerce=int
)
答案 1 :(得分:1)
使用BigIntegerField,你也可以设置默认值= 0或你想要的任何选择。