#django #django-models #django-forms #django-views #django-templates
#django #django-модели #django-forms #django-представления #django-шаблоны
Вопрос:
Я создаю форму обновления пользователя в своем приложении. но каждый раз, когда форма отправляется, она создает новую запись, и при повторной попытке отправки возвращается ошибка целостности (дублирующее имя пользователя, оба из которых равны нулю).
Сообщение ОБ ОШИБКЕ: django.db.utils.Ошибка целостности: сбой УНИКАЛЬНОГО ограничения: auth_user.username
forms.py:
class UserChangeForm(forms.ModelForm):
class Meta:
model = User
fields = ['email', 'first_name', 'last_name']
def __init__(self, username, *args, **kwargs):
super(UserChangeForm, self).__init__(*args, **kwargs)
self.username = username
views.py:
def profile(request):
user = request.user
if request.method == 'POST':
user_form = UserChangeForm(user, request.POST)
if user_form.is_valid():
user_form.save()
messages.success(request, f'Your account has been updated!')
return redirect('users:profile')
else:
email = request.user.email
first_name = request.user.first_name
last_name = request.user.last_name
user_form = UserChangeForm(user, initial={
'email': email,
'first_name': first_name,
'last_name': last_name
})
context = {
'user_form': user_form,
}
return render(request, 'users/profile.html', context)
Ответ №1:
вам нужно передать пользователя как экземпляр в условии if и в else тоже так
def profile(request):
if request.method == 'POST':
user_form = UserChangeForm(request.POST , instance = request.user)
if user_form.is_valid():
user_form.save()
messages.success(request, f'Your account has been updated!')
return redirect('users:profile')
else:
user_form = UserChangeForm(instance=request.user)
context = {
'user_form': user_form,
}
return render(request, 'users/profile.html', context)