假设我在forms.py中有这个表格:
CATEGORY_CHOICES= ((1,'Cat1'),
(2,'Cat2'),
(3,'Cat3'),
(4,'Cat4'),
)
class AddMessageForm(forms.Form):
title = forms.CharField(max_length=250)
groupname = forms.CharField(widget=forms.HiddenInput)
categories = forms.ChoiceField(choices = CATEGORY_CHOICES, required=True)
body = forms.CharField(widget=forms.Textarea)
现在,CATEGORY_CHOICES是“硬编码的”。这有效,但我需要在views.py中添加CATEGORY_CHOICES - 我需要做一些dbqueries来获取每个组下的“类别”。
我该怎么做?
PS:我通过这样的方式设法对我的views.py中的HiddenInput(groupname)做了同样的事情:
form = AddMessageForm(
initial={'groupname': groupname},
)
我希望我明白我的问题。任何澄清等请添加评论。
的问候。 w ^
答案 0 :(得分:5)
在表单构造中设置选项
class AddMessageForm(forms.Form):
....
def __init__(self, *args, **kwargs):
self.fields['categories'].choices = \
[(x.id, x.title) for x in MyObject.objects.all()]
super(AddMessageForm, self).__init__(*args, **kwargs)
如果你真的想在views.py中这样做,那么方法是一样的。
myform.fields['categories'].choices = \
[(x.id, x.title) for x in Category.objects.all()]