我试图通过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))
从逻辑上讲,这似乎应该工作,但是当我加载页面时,用于编辑用户的表单没有显示在我的模板中。我错过了什么?
Django已经为此提供了帮助表单;您可以在文档中找到。
如果您仍然希望使用自己的视图,则需要记住,登录的用户已经是请求的一部分,因此可以简化视图。因为你已经使用了RequestContext,你不需要做任何其他的事情来添加CSRF代码——只要CSRF中间件在你的设置中(如U-DON所指出的)。
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))