通过ModelForm编辑django.auth用户

时间:2011-12-04 19:12:17

标签: django django-models django-authentication

我正在尝试通过ModelForm使用django.contrib.auth.models.User模型创建一个简单的“配置文件编辑”表单。这就是我目前所拥有的:

形式:

class UserEditForm(ModelForm):
    class meta:
        model = User

    def __init__(self, *args, **kwargs):
        self.request = kwargs.pop('request', None)
        super(UserEditForm, self).__init__(*args, **kwargs)

查看:

def edit_user(request, user):
    user = get_object_or_404(User, username__exact = user)

    form = UserEditForm(request.POST or None, request=request, instance=user)

    return render_to_response('forms.html', add_csrf(request, form=form, title='Edit User'), context_instance=RequestContext(request))

从逻辑上讲,这似乎应该可行,但在我加载页面时,编辑用户的表单不会显示在我的模板中。我错过了什么?

1 个答案:

答案 0 :(得分:1)

Django已经为你提供了帮助形式;您可以找到in the documentation

如果您仍想使用自己的,则需要记住,登录用户已经是请求的一部分,因此您可以简化视图。由于您已经在使用RequestContext,因此只要CSRF中间件在您的设置中(如U-DON所指出的那样),您就不需要做任何其他事情来添加CSRF代码。

from django.contrib.auth.decorators import login_required

@login_required
def edit(request)
   # This body will only run if the user is logged in
   # and the current logged in user will be in request.user

   edit_form = UserEditForm(instance=request.user)
   return render_to_response('forms.html',
                             {'form':edit_form},
                             context_instance=RequestContext(request))