Django 如何在ModelFormMixin post()方法中获取当前用户?

Django 如何在ModelFormMixin post()方法中获取当前用户?,django,django-views,Django,Django Views,如何在LIstview和ModelFormMixin的以下实现中获取当前登录的用户: class ListMessages(ListView, ModelFormMixin): model = Message template_name = 'accounts/list_messages.html' context_object_name = 'messages' form_class = MessageHiddenUserForm #success_url = reverse_lazy('ac

如何在LIstview和ModelFormMixin的以下实现中获取当前登录的用户:

class ListMessages(ListView, ModelFormMixin):
model = Message
template_name = 'accounts/list_messages.html'
context_object_name = 'messages'
form_class = MessageHiddenUserForm
#success_url = reverse_lazy('accounts:list_messages', kwargs={'uname': })

def post(self, request, *args, **kwargs):
    self.object = None
    self.form = self.get_form(self.form_class)

    if self.form.is_valid():
        self.form.user_to = self.kwargs['uname']
        self.form.user_from = request.user #this doesn't work
        self.object = self.form.save()

    return self.get(request, *args, **kwargs)

问题不在于从何处获取用户,而在于将用户分配到何处。在表单上设置任意属性根本不起任何作用;您需要将其分配给
表单的结果。保存

obj = self.form.save(commit=False)
obj.user_to = self.kwargs['uname']
obj.user_from = request.user
obj.save()
注意,您不能像那样直接调用self.get()
;您必须始终在成功发布后重定向

return redirect('accounts:list_messages', kwargs={...})

对于方法“post”,请使用request.user.username获取当前登录的用户。

帮助我解决了问题。但是,obj.user_to需要一个用户实例,所以我做了
obj.user_to=user.objects.get(username=self.kwargs['uname'])