在Django中使用动态选择字段

Rob*_*ith 6 django dynamic choicefield

我有一个choiceField用于创建带有一些选项的选择字段.像这样的东西:

forms.py
    class NewForm(forms.Form):
        title = forms.CharField(max_length=69)
        parent = forms.ChoiceField(choices = CHOICE)
Run Code Online (Sandbox Code Playgroud)

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

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

views.py
form = NewForm(initial={'choices': my_actual_choices})
Run Code Online (Sandbox Code Playgroud)

但我必须添加一个虚拟选择来创建NewForm,my_actual_choices似乎无论如何都不起作用.

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

sur*_*urX 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)
Run Code Online (Sandbox Code Playgroud)

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