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

+0

覆盖'get_form'是一个选项,但是重写'get_form_kwargs'是DRYer。 – Alasdair

+0

好点,我会更新答案。 –

你可以在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