Django表单:具有“选择”的默认值,其中“选择”源来自数据库

时间:2011-02-21 13:51:12

标签: django django-forms

假设我在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 ^

1 个答案:

答案 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()]