繁体   English   中英

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

[英]Django: pass data from CBV form view to form CBV

我有一个带有ModelChoiceField Form ,它被用作FormViewform_class

选择字段必须填充绑定到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)

创建实例后,该如何将数据传递给表单?

我尝试覆盖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())

覆盖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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM