Updating User model in Django with class based UpdateView

不打扰是莪最后的温柔 提交于 2019-12-17 22:33:24

问题


I am trying to update the Django User model with the class based UpdateView that automatically renders with the current user but am getting an error that a pk or slug is required. The form work and renders with the proper current user context but throws the error when I try to submit the changes. Below is the view I am using:

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())

回答1:


I need to override the get_object() method on the update view and do not need to override form_valid. The custom get_object() method is:

    def get_object(self, queryset=None):
        return self.request.user



回答2:


I know this is an old post but something stood out to me and this comment is info for newcomers.

The get call for self.object will work but it's not matching the actual fields to get username as it's supplying the user instance:

self.object = User.objects.get(username=self.request.user)

You should match the username argument with the instance username argument:

self.object = User.objects.get(username=self.request.user.username)

Better still, use the pk (id):

self.object = User.objects.get(pk=self.request.user.pk)

There could be a neater way of doing this, so I'm open to suggestions.



来源:https://stackoverflow.com/questions/6181041/updating-user-model-in-django-with-class-based-updateview

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!