django CBV:以表格形式获取当前用户
问题描述:
我需要在当前用户参与下执行表单验证。我知道如何去做,但使用FBV方法。可能是这样的:django CBV:以表格形式获取当前用户
首先声明__ __的init()方法:
def __init__(self, user, *args, **kwargs):
self.user = user
super(MyFormClass, self).__init__(*args, **kwargs)
所以现在我可以使用self.user任何验证方法。
在我可以一个视图方法后来:
if request.POST:
form = MyFormClass(request.user, request.POST)
我的问题:我如何可以做同样的,但使用CBV:
目前我使用的CreateView的通用和form_class ATTR:
class MyModelCreate(CreateView):
model = MyModel
form_class = MyFormClass
我怎样才能实例化MyFormClass与当前用户使用这种方式。
答
您需要覆盖get_form()
或get_form_kwargs()
。如果您对使用CBV覆盖哪些方法很模糊,那么优秀的CCBV网站就是一个很好的参考。这里有一个链接,你从CCBV文档想要的东西:
https://ccbv.co.uk/projects/Django/1.11/django.views.generic.edit/CreateView/#get_form_kwargs
答
你可以在CreateView的的form_valid方法的用户。
def form_valid(self, form):
user = self.request.user
# add your validation
return super(YourView, self).form_valid(form)
+0
'form_valid'方法是为了处理一个有效的表单,我认为在这里做进一步的验证不是一个好主意。 – Alasdair
覆盖'get_form'是一个选项,但是重写'get_form_kwargs'是DRYer。 – Alasdair
好点,我会更新答案。 –