殼以下罰款作品:如何更新用戶對象而不創建新對象?
>>> from django.contrib.auth.models import User
>>> user=User.objects.get(pk=1)
>>> user.first_name = u'Some'
>>> user.last_name = u'Name'
>>> user.save()
>>> user.first_name
u'Some'
>>> user.last_name
u'Name'
然後我嘗試做相同的形式:
# forms.py
class UserForm(forms.ModelForm):
class Meta:
model = User
fields = ['first_name', 'last_name']
# views.py
def edit_names(request, template_name="registration/edit_names.html"):
if request.method == "POST":
form = UserForm(data=request.POST)
if form.is_valid():
user = form.save(commit=False)
user.save()
url = urlresolvers.reverse('my_account')
return HttpResponseRedirect(url)
else:
form = UserForm(instance=request.user)
page_title = _('Edit user names')
return render_to_response(template_name, locals(),
context_instance=RequestContext(request))
# edit_names.html
<form action="." method="post">{% csrf_token %}
<table>
{{ form.as_table }}
<tr><td colspan="2">
<input type="submit" />
</td></tr>
</table>
</form>
我在瀏覽器中打開網頁,看到兩個字段First name
和Last name
。當我填寫以下字段並提交表單我得到的錯誤:
Exception Type: IntegrityError
Exception Value: column username is not unique
我也嘗試添加['username']
到字段列表中的窗體。如果我提交表單與我的用戶名(如request.user),窗體顯示ERRORMESSAGE:
User with this Username already exists.
如果我改變用戶名來一些獨特的名字,正在創建使用該用戶名新用戶。
現在的問題是: 如何更新用戶對象,而不是創建新的?
對不起,如此詳細,但我在這裏很難搜索,找不到我的問題的答案。
BTW,這種情況下不爲我工作:
- Extending UserCreationForm to include email, first name, and last name
- add field first_name and last_name in django-profile
- How to create a UserProfile form in Django with first_name, last_name modifications?
編輯:
由於只是建議@fceruti我在req上添加uest.method == '後' 分支這樣的:
form = UserForm(data=request.POST, instance=request.user)
不會有一個'請求。用戶'如果這是一個註冊表格 – 2012-03-31 15:58:16
但它是一個編輯用戶表格:P – fceruti 2012-03-31 15:59:43
啊對不起,我沒有閱讀視圖名稱 – 2012-03-31 16:02:02