我的应用程序的编辑用户功能遇到了一些问题。
这是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尝试创建一个新用户而不是更新它,所以有两个用户使用相同的用户名导致错误...但为什么?
答案 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()