django CBV:获取表单中的当前用户

时间:2017-06-21 14:34:36

标签: django

我需要在当前用户参与的情况下执行表单验证。我知道怎么做但是使用FBV方法。可能是这样的:

首先声明__ 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。

2 个答案:

答案 0 :(得分:1)

您需要覆盖get_form()get_form_kwargs()。如果你对CBV中要覆盖哪些方法很模糊,那么很好的参考就是优秀的CCBV网站。以下是您希望从CCBV文档中获得的内容的链接:

https://ccbv.co.uk/projects/Django/1.11/django.views.generic.edit/CreateView/#get_form_kwargs

答案 1 :(得分:0)

您可以使用CreateView的form_valid方法获取用户。

def form_valid(self, form):
    user = self.request.user
    # add your validation

    return super(YourView, self).form_valid(form)