排序。
我有一个像这样定义的模型:
class EditUserForm(UserForm):
def __init__(self,data=None,instance=None):
UserForm.__init__(self,data=data,instance=instance)
del self.fields['username']
我这样做是因为我想排除在EditUserForm上显示的用户名字段,但因为我覆盖了UserForm中的用户名字段,django中的一个错误阻止了这个工作,所以我用这种方式编写了表单。
我的观看代码如下所示:
if request.method == 'POST':
uf = EditUserForm(request.POST,instance=user)
upf = StudentProfileForm(request.POST,instance=profile)
if uf.is_valid() and upf.is_valid():
print 'VALID'
uf.save()
upf.save()
messages.success(request, 'You have successfully updated your profile.')
return HttpResponseRedirect('/student/editprofile')
else:
print 'INVALID'
为了测试它,我尝试更改名字并使密码不匹配,当我提交时,我注意到打印了INVALID(正确显示了密码验证错误)但是在页面顶部我有“欢迎”(用户名()用户姓)“我注意到名字已经改变了。当我转到另一个页面时,它会返回到正确的值。我怎么能不发生这种情况?
这是我的HTML代码:
{% if user.is_authenticated %}
Welcome, <a href = "/{{user.get_profile.getType}}/profile">{{user.first_name}} {{user.last_name}}</a> |
<a href = "/auth/logout">Logout</a>
{% else %}
{% endif %}
我猜测发生了什么,当我发布数据时,它会将user.first_name置于上下文中,覆盖实际的user.first_name。但它无效,因为数据尚未保存......
那么,如何在发布的模板中使用user.first_name而不更改它的值,直到它实际有效?
答案 0 :(得分:0)
你的假设是对的。验证后,ModelForm
会使用给定的user
更新给定的实例(data
),使其处于无效状态。
你可以:
user
,user
user.first_name
存储在临时变量中,并在验证失败时将其设置回来编辑:请注意,尽管ModelForm会修改实例,但它不会保存它。