指定模型中的选项和ModelForm中的RadioButton渲染未选中的值“------”

时间:2012-11-12 07:49:44

标签: django django-models django-forms

我的目标是能够使用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。

2 个答案:

答案 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或你想要的任何选择。