我有choiceField
以创建带有一些选项的选择字段。像这样:
forms.py
class NewForm(forms.Form):
title = forms.CharField(max_length=69)
parent = forms.ChoiceField(choices = CHOICE)
但我希望能够在没有预定义元组的情况下创建选项(ChoiceField
需要)。基本上,我需要访问request.user来根据每个用户填写一些选项标签,但我不知道是否有任何方法可以在forms.Form类中使用请求。
另一种方法是通过以下方式预填充NewForm
的实例:
views.py
form = NewForm(initial={'choices': my_actual_choices})
但是我必须添加一个虚拟的CHOICE来创建NewForm,而my_actual_choices似乎无论如何都不起作用。
我认为解决这个问题的第三种方法是创建ChoiceField的子类并重新定义save()
,但我不知道该怎么做。
答案 0 :(得分:7)
您可以通过覆盖 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)
等。