如何在forms.py def save(self)中获取当前用户?

时间:2018-11-28 03:02:20

标签: python django django-forms django-users

如何使用户登录def save(self, commit=True)的{​​{1}}。我尝试了forms.py,但是没有用... self.request.user没有self:/

有人可以帮助我吗?

3 个答案:

答案 0 :(得分:1)

使用form_valid函数将用户分配给变量。

class PutYourClassNameHere(generic.CreateView):
    # your code here
    ...

    def form_valid(self, form):
        form.instance.user = self.request.user
        return super(PutYourClassNameHere, self).form_valid(form)

答案 1 :(得分:0)

这是因为请求未传递到表单的save()方法中。因此,基本上,您应该在视图中覆盖get_form_kwargs形式的方法,并将request对象传递给它。

def get_form_kwargs(self):
    kw = super(MyModelCreateView, self).get_form_kwargs()
    kw['request'] = self.request
    return kw

答案 2 :(得分:0)

您需要将请求传递给表单的save方法。尝试这样:

重写form_valid方法以将请求传递给表单的 save 方法:

class YourView(..):
     def form_valid(self, form):
         form.save(commit=True, request=request)
         return HttpResponseRedirect(self.get_success_url())

以您的形式:

def save(self, commit=True, request=None):
   instance = super(YourFormClass, self).save(commit=False)
   user = request.user
   # rest of your logic
   instance.save()
   return instance