Django 1.5完整性错误:(1062,"重复输入''用于密钥'用户名'")

时间:2014-07-04 15:17:54

标签: python django

我的应用程序的编辑用户功能遇到了一些问题。

这是views.py中的代码:

def edit_user_profile(request):
if request.method == 'POST':
    form = UserProfileEditForm(request.POST)
    if form.is_valid():
        user = form.save()
        return HttpResponseRedirect(reverse('com:lebay_view_user_profile', args=(user.pk,)))
else:
    form = UserProfileEditForm(instance=request.user.user)

return render_to_response('lebay/edit_user_profile.html', {
    'form': form,
}, context_instance=RequestContext(request))

这是来自form.py:

class UserProfileEditForm(forms.ModelForm):
    zipcode = USZipCodeField()
    phone = USPhoneNumberField()

    class Meta:
        model = User
        fields = ['first_name', 'last_name', 'email', 'address_line_1', 'address_line_2', 'city', 'state', 'zipcode', 'phone']

我认为django尝试创建一个新用户而不是更新它,所以有两个用户使用相同的用户名导致错误...但为什么?

2 个答案:

答案 0 :(得分:2)

您需要在实例化时将instance传递给表单,最初和后续操作都是如此。这是常见的Django表单实例化模式的简单版本:

def edit_user_profile(request):
    form = UserProfileEditForm(data=request.POST or None,
                               instance=request.user.user)
    if form.is_valid():
        user = form.save()
        return HttpResponseRedirect(reverse('com:lebay_view_user_profile', args=(user.pk,)))

    return render_to_response('lebay/edit_user_profile.html', {
        'form': form,
    }, context_instance=RequestContext(request))

答案 1 :(得分:0)

如果要更新用户,则必须在创建表单时使用instance参数。请参阅从文档(Django documentation

中提取的示例
f = ArticleForm(request.POST or None, instance=a)
f.save()