3

私の目標はget_FOO_display()を使用できるようにすることであり、私が理解している限り、モデルフィールドで選択肢を指定する必要があります。同時に、ModelFormをRadioButtonとして使用してフォームをレンダリングしたいと考えています。

私が抱えている問題は、ドロップダウン選択で使用されるデフォルト値の「------」がRadioButtonオプションの1つとして表示されることです。

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),
        }

どちらの場合も、3つのラジオボタンが表示されます。

"": -------
0 : No
1 : Yes

「-------」を取得しない唯一の方法は、モデルフィールドからchoices = YESNO_CHOICESを削除することですが、これによりget_FOO_display()が機能しなくなります。

これを機能させるために使用したアプローチをいただければ幸いです。

ありがとう。JD。

4

2 に答える 2

9

-------選択したものが表示されないようにする場合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
                )
于 2012-11-12T08:28:44.567 に答える
1

BigIntegerFieldを使用して、default=0または任意の選択を設定することもできます。

于 2016-08-04T15:20:04.550 に答える