8

我有一个choiceField为了创建一个带有一些选项的选择字段。像这样的东西:

forms.py
    class NewForm(forms.Form):
        title = forms.CharField(max_length=69)
        parent = forms.ChoiceField(choices = CHOICE)

但我希望能够在没有预定义元组的情况下创建选项(这是 所需的ChoiceField)。基本上,我需要访问 request.user 以根据每个用户填写一些选项标签,但我不知道是否有任何方法可以在 forms.Form 类中使用 request。

另一种方法是预填充NewFormvia 的实例:

views.py
form = NewForm(initial={'choices': my_actual_choices})

但我必须添加一个虚拟 CHOICE 来创建 NewForm 并且 my_actual_choices 似乎无论如何都不起作用。

我认为解决此问题的第三种方法是创建 ChoiceField 的子类并重新定义save(),但我不确定如何去做。

4

1 回答 1

8

您可以通过覆盖init来动态填充它们,基本上代码如下所示:

class NewForm(forms.Form):
    def __init__(self, choices, *args, **kwargs):
        super(NewForm, self).__init__(*args, **kwargs)
        self.fields["choices"] = forms.ChoiceField(choices=choices)

NewForm(my_actual_choices)NewForm(my_actual_choices, request.POST, request.FILES)等等。

于 2012-07-21T01:19:45.760 回答