get_or_create выбрасывает ошибку целостности

Учитывая, что вся цель object.get_or_create () заключается в том, чтобы получить объект, если он уже существует, я не понимаю, почему он вызывает ошибку целостности для этого кода:

class UserAdd(TemplateView): def post(self, request, *args, **kwargs): context = self.get_context_data(*args, **kwargs) form = UserAddForm(request.POST) if form.is_valid(): first_name = form.cleaned_data['first_name'] last_name = form.cleaned_data['last_name'] myemail = form.cleaned_data['email'] mypass = form.cleaned_data['password'] if myemail and mypass: myuser,created = User.objects.get_or_create(email=myemail, username=myemail, first_name=first_name, last_name=last_name) if created: myuser.set_password(mypass) return HttpResponseRedirect('/') 

Вот ошибка:

 django.db.utils.IntegrityError IntegrityError: (1062, "Duplicate entry 'user@domain.com' for key 'username_UNIQUE'") 

Кто-нибудь знает, что происходит?

2 Solutions collect form web for “get_or_create выбрасывает ошибку целостности”

Параметры, отправленные в метод get_or_create должны точно соответствовать, или ORM django попытается создать новый объект, и поскольку ограничение первичного ключа / уникального столбца будет нарушено, вы получите ошибку.

Попробуй это:

 if form.is_valid(): first_name = form.cleaned_data['first_name'] last_name = form.cleaned_data['last_name'] myemail = form.cleaned_data['email'] mypass = form.cleaned_data['password'] if myemail and mypass: myuser,created = User.objects.get_or_create(email=myemail, defaults = {'username': myemail, 'first_name': first_name, 'last_name': last_name}) if created: myuser.set_password(mypass) return HttpResponseRedirect('/') 

Подробнее о get_or_create здесь . Аргумент defaults= то, что вам нужно.

Вы просите django взять запись на основе четырех условий:

  • Эл. адрес
  • имя пользователя
  • имя
  • Фамилия

Таким образом, у всех четырех объединенных полей нет записи.

Ты должен сделать:

 myuser, created = User.objects.get_or_create( username=myemail, defaults={'first_name': first_name, 'last_name': last_name, 'email': myemail}) 
Interesting Posts

Сортировка словарных ключей на основе их значений

Обнаружение мыши на изображении в Pygame

Ошибка pydot и graphviz: не удалось импортировать dot_parser, загрузка файлов точек будет невозможна

Python – создание словаря (дерева) из списка кортежей

Как получить доступ к данным, хранящимся в QModelIndex

Python, как я могу получить gif-фреймы

Python Logging (имя функции, имя файла, номер строки) с использованием одного файла

Django создать пользовательский UserCreationForm

Как получить доступ к HttpRequest из urls.py в Django

Python и объект / класс attrs – что происходит?

Matplotlib – Как установить ylim () для серии графиков?

pip install: проверьте разрешения и владельца этого каталога

как добавить разделитель тысяч в число, которое было преобразовано в строку в python?

Встроенная служба обмена сообщениями Chrome не принимает сообщения определенных размеров (Windows)

numpy datetime64 добавить или указать интервал даты

Python - лучший язык программирования в мире.