công trình sau tốt trong vỏ:Làm cách nào để cập nhật đối tượng Người dùng mà không cần tạo đối tượng mới?
>>> 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'
Sau đó, tôi cố gắng làm điều tương tự với các hình thức:
# 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>
tôi mở trang trong trình duyệt và xem hai lĩnh vực First name
và Last name
. Khi tôi điền vào các trường và gửi biểu mẫu tôi nhận được lỗi:
Exception Type: IntegrityError
Exception Value: column username is not unique
Tôi cũng cố gắng thêm ['username']
vào danh sách các lĩnh vực trong UserForm. Nếu tôi gửi biểu mẫu với Tên truy nhập của tôi (như request.user), hiển thị dạng ERRORMESSAGE:
User with this Username already exists.
Nếu tôi thay đổi tên người dùng đối với một số tên duy nhất, người dùng mới với tên người dùng mà đang được tạo ra.
Câu hỏi đặt ra là: Làm cách nào để cập nhật Đối tượng người dùng, không tạo đối tượng mới?
Xin lỗi vì đã quá chi tiết, nhưng tôi đã tìm kiếm khó khăn ở đây và không thể tìm thấy câu trả lời cho câu hỏi của mình.
BTW, những trường hợp này không làm việc cho tôi:
- 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?
EDIT:
Như đã đề cập @fceruti Tôi chỉ được thêm vào req uest.method == 'bài' chi nhánh này:
form = UserForm(data=request.POST, instance=request.user)
Sẽ không có một 'yêu cầu. người dùng' nếu đây là biểu mẫu đăng ký –
nhưng đó là biểu mẫu chỉnh sửa người dùng: P – fceruti
xin lỗi, tôi không đọc tên chế độ xem –