Сбой ограничения UNIQUE: имя пользователя account_customuser.username
У меня проблема с регистрацией пользователя. Я использую Django.
Когда я регистрирую первого пользователя, все в порядке, и пользователь появляется в панели администратора. Проблема возникает, когда я хочу зарегистрировать второго пользователя. После отправки формы регистрации появляется следующая ошибка:
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/django/db/backends/utils.py", line 84, in _execute
return self.cursor.execute(sql, params)
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/django/db/backends/sqlite3/base.py", line 423, in execute
return Database.Cursor.execute(self, query, params)
sqlite3.IntegrityError: UNIQUE constraint failed: account_customuser.username
Похоже, что пользователь не будет сохранен, потому что имя пользователя (email) не уникально, но email второго пользователя отличается от первого. Только суперпользователь и первый зарегистрированный пользователь появляются в панели администратора.
models.py
from django.db import models
from django.contrib.auth.models import AbstractUser
from orders.models import Order
class CustomUser(AbstractUser):
email = models.EmailField(unique=True, max_length=255, default='')
zip_code = models.CharField(max_length=6)
address = models.CharField(max_length=255)
street = models.CharField(max_length=255)
first_name = models.CharField(max_length=255)
last_name = models.CharField(max_length=255)
is_active = models.BooleanField(default=True)
is_staff = models.BooleanField(default=False)
is_admin = models.BooleanField(default=False)
date_joined = models.DateTimeField(auto_now_add=True)
last_login = models.DateTimeField(auto_now=True)
email_confirmed = models.BooleanField(default=False)
orders = models.ForeignKey(
Order, related_name='orders', on_delete=models.CASCADE, null=True, blank=True)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['username']
def __str__(self):
return self.email
views.py
from django.shortcuts import render, redirect
from .forms import CreateUserForm
def signup(request):
form = CreateUserForm()
if request.method == 'POST':
form = CreateUserForm(request.POST)
if form.is_valid():
form.save()
return redirect('/')
return render(request, 'views/signup.html', {'form': form})
forms.py
from django.contrib.auth.forms import UserCreationForm
from .models import CustomUser
class CreateUserForm(UserCreationForm):
class Meta:
model = CustomUser
fields = ['zip_code', 'address', 'street', 'first_name',
'last_name', 'email', 'password1', 'password2']
Похоже, что у вас все еще есть столбец username
в базе данных, но вы не создаете пользователей с именами. Поэтому ограничение, вероятно, не работает, потому что у вас будет два пользователя с username
в None
.
Если вам не нужна колонка username
, вам нужно добавить username = None
в ваш класс CustomUser
и сгенерировать миграции для удаления колонки.