Django:将数据从 CBV 表单视图传递到表单 CBV

dab*_*aba 5 django

我有Formwith a ModelChoiceField,它被用作form_classa 中的the FormView

选择字段必须填充与request对象绑定的信息。

我们总结一下:

class MyFormView(FormView):
    # I need to pass `request.user` and a value 
    # derived from `request.GET['pk']` to the form
    form_class = MyForm

class MyForm(Form):
    choices = ModelChoiceField(queryset=MyChoice.objects.none())

    def __init__(self, user, number, *args, **kwargs):
        super(MyForm, self).__init__(*args, **kwargs)
        self.fields['choices'] = MyChoice.objects(number=number, owner=user)
Run Code Online (Sandbox Code Playgroud)

创建实例时,我需要做什么才能将该数据传递到表单?

我尝试覆盖,get_form但我不确定这是执行此操作的正确方法:

 def get_form(self, form_class):
        user = self.request.user
        number = SomeModel.objects.get(self.GET['pk']).number
        return form_class(user, number, **self.get_form_kwargs())
Run Code Online (Sandbox Code Playgroud)

Ala*_*air 7

覆盖get_form可以,但更好的方法是覆盖get_form_kwargs,这样您就不必从get_form方法中复制代码。

class MyFormView(FormView):
    form_class = MyForm

    def get_form_kwargs(self):
        kwargs = super(MyFormView, self).get_form_kwargs()
        kwargs['user'] = self.request.user
        kwargs['number'] = SomeModel.objects.get(self.GET['pk']).number
        return kwargs
Run Code Online (Sandbox Code Playgroud)