[英]Django: pass data from CBV form view to form CBV
我有一个带有ModelChoiceField
Form
,它被用作FormView
的form_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.