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)

我想创建两个表单域,一个是<select>选项YEAR_CHOICES,一个是选项COLORS。你能用 做这个ModelChoiceField吗?在我的重新定义选择forms.py似乎不是很干。否则,你将如何解决这个问题?

这样的事情是我所设想的,但它不起作用:

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

来自文档(这里

您可以使用select小部件并指定选择。在你的情况下

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

但是,由于您已经colorchoices您一起定义,实际上不需要做任何事情(除了将元设置为BrowseFormto Thing)即可使其正常工作。它将默认为您想要的行为。

于 2013-01-23T21:21:37.357 回答
1

您可以使用模型表单

from django.forms import ModelForm

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

然后它会自动拉入您的选择。

于 2013-01-23T22:24:38.797 回答