微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用基于类的UpdateView在Django中更新用户模型

如何解决使用基于类的UpdateView在Django中更新用户模型

| 我正在尝试使用基于类的UpdateView更新Django User模型,该类会自动以当前用户呈现,但是却收到一个错误提示需要pk或slug。表单可以在当前用户上下文中正常工作并呈现,但是当我尝试提交更改时会引发错误。下面是我正在使用的视图:
class UserUpdateView(UpdateView):
    form_class = UserForm
    model = User
    template_name = \'members/user_update.html\'

    def get(self,request,**kwargs):
        self.object = User.objects.get(username=self.request.user)
        form_class = self.get_form_class()
        form = self.get_form(form_class)
        context = self.get_context_data(object=self.object,form=form)
        return self.render_to_response(context)

    def form_valid(self,form):
        self.object = form.save(commit=False)
        self.object.user = self.request.user
        self.object.save()
        return HttpResponseRedirect(self.get_success_url())
    

解决方法

        我需要在更新视图上覆盖
get_object()
方法,并且不需要覆盖form_valid。自定义
get_object()
方法是:
    def get_object(self,queryset=None):
        return self.request.user
    ,        我知道这是一篇过时的文章,但对我来说很突出,这对于新来者来说是信息。 对self.object的get调用将起作用,但是由于它正在提供用户实例,因此它与实际字段不匹配以获取用户名:
self.object = User.objects.get(username=self.request.user)
您应该将username参数与实例username参数匹配:
self.object = User.objects.get(username=self.request.user.username)
更好的是,使用pk(id):
self.object = User.objects.get(pk=self.request.user.pk)
这样做可能会有更整洁的方式,所以我愿意提出建议。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。