我正在尝试通过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))
从逻辑上讲,这似乎应该可行,但在我加载页面时,编辑用户的表单不会显示在我的模板中。我错过了什么?
答案 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))