【发布时间】:2013-09-16 12:13:24
【问题描述】:
我现在正在与 Django 表单验证作斗争。我正在使用非常基本的代码。使用 ajax 请求返回表单数据是唯一特殊的事情,但我认为这不是我的问题的原因。 我正在尝试更新用户条目。我创建了一个用户实例,并将该实例输入 CreateForm(),但我仍然收到重复的用户名错误。
这是视图的一部分:
def user_update(request):
if request.is_ajax():
print request.POST
user = User.objects.get(pk=int(request.POST['pk']))
print user
form = UserCreateForm(request.POST, instance=user)
print form
if form.is_valid():
form_cleaned = form.cleaned_data
else:
print '### form is invalid ###'
print form.error_messages
request.POST 的输出是:
<QueryDict: {u'username': [u'testuser'], u'password1': [u'test'], u'password2': [u'test'], u'pk': [u'27'], u'csrfmiddlewaretoken': [u'wyBoaBAlxLTO952BzWSxR7HMK6W7nsAM'], u'email': [u'soso@soso.so']}>
print user 的输出是:
testuser
在print form 我总是收到重复的用户名错误,因此表单总是无效的。
请给我一个提示。非常感谢。
【问题讨论】:
-
恕我直言,如果用户已经通过身份验证,设置
instance=user将是错误的,我认为这就是产生错误的原因。 -
如果您尝试更新用户,为什么要使用
UserCreateForm?你应该改用UserChangeForm。 -
@equinoxel:试图更改其他用户记录的用户(如管理员)。第一个是经过身份验证的,但据我所知,我需要创建一个我想要更新的用户实例,因为 Django 会尝试创建该用户。
-
@Burhan Khalid:好的,使用 CreateForm 来更改用户记录看起来很奇怪。我认为这没问题,因为 CreateForm 包含与用户相关的所有字段,因此也可以用于更新用户。
标签: django forms validation duplicates