我想根据模特选择提供表单字段。所以,如果在我的模特中:
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())
答案 0 :(得分:1)
您可以使用select
窗口小部件并指定选项。在你的情况下
color = forms.CharField(max_length=20, widget=forms.Select(choices=COLORS))
但是,由于您已经使用color
定义了choices
,因此您实际上不需要执行任何(除了设置BrowseForm
的元数据到Thing
)让这个工作。它将默认为您想要的行为。
答案 1 :(得分:1)
您可以使用模型表单
from django.forms import ModelForm
class BrowseForm(ModelForm):
class Meta:
model = Thing
然后它会自动提取您的选择。