1

モデルの選択に基づいてフォーム フィールドを提供したいと考えています。したがって、私のモデルの場合:

COLORS = (
    ('BLA', 'Black'),
    ('WHI', 'White'),
    ('RED', 'Red'),
    ('BLU', 'Blue'),
)

YEAR_CHOICES = []
for r in range(1980, (datetime.datetime.now().year+1)):
    YEAR_CHOICES.append((r,r))

class Thing(models.Model):
    stuff = models.ForeignKey(Stuff)
    color = models.CharField(max_length=3, choices=COLORS)
    year = models.IntegerField(('year'), max_length=4, choices=YEAR_CHOICES, default=datetime.datetime.now().year)

2 つのフォーム フィールドを作成したいと考えています。1 つは<select>オプションがYEAR_CHOICESで、もう 1 つはオプションがCOLORSです。を使用してこれを行うことができますModelChoiceFieldか? 私の選択肢を再定義することは、forms.pyあまり DRY ではないようです. そうでなければ、この問題をどのように解決しますか?

このようなものは私が想像していたものですが、うまくいきません:

class BrowseForm(forms.Form):
    stuff = forms.ModelChoiceField(queryset=Stuff.objects.all())
    color = forms.ModelChoiceField(queryset=Thing.color.choices())
    year = forms.ModelChoiceField(queryset=Thing.year.choices())
4

2 に答える 2

1

モデルフォームを使用できます

from django.forms import ModelForm

class BrowseForm(ModelForm):
    class Meta:
        model = Thing

その後、選択内容が自動的に取り込まれます。

于 2013-01-23T22:24:38.797 に答える
1

ドキュメントから(ここ

selectウィジェットを使用して選択肢を指定できます。あなたの場合

color = forms.CharField(max_length=20, widget=forms.Select(choices=COLORS))

ただし、既に定義colorしているため、実際には何もchoicesする必要はありません( toのメタを設定する以外)。デフォルトでは、必要な動作になります。BrowseFormThing

于 2013-01-23T21:21:37.357 に答える