Django django.db.utils.IntegrityError: дублирование значения ключа
У меня проблема с простой моделью пользователя. Я написал тест для функции нормализации электронной почты и в ответ получил ошибку "django.db.utils.IntegrityError: duplicate key value violates unique constraint "core_user_username_key"".
ДЕТАЛЬ: Ключ (имя пользователя)=() уже существует. " Когда я добавил "user.delete()" после "self.assertEqual(user.email, expected)" все тесты прошли.Что не так? Этот тест создает пользователей с одинаковым полем имени пользователя?
Models.py
class UserManager(BaseUserManager):
"""Manager for user"""
def create_user(self, email, password=None, **extra_fields):
user = self.model(email=self.normalize_email(email), **extra_fields)
user.set_password(password)
user.save(using=self._db)
return user
class User(AbstractUser, PermissionsMixin):
"""User model"""
email = models.EmailField(max_length=255, unique=True)
name = models.CharField(max_length=255)
is_active = models.BooleanField(default=True)
is_staff = models.BooleanField(default=False)
objects = UserManager()
REQUIRED_FIELDS = []
USERNAME_FIELD = 'email'
test.py
class ModelTest(TestCase):
def test_create_user_with_email(self):
"""Testing creating user with email address"""
email = 'testaddress@example.com'
password = 'testpassword1234'
user = get_user_model().objects.create_user(
email=email,
password=password,
)
self.assertEqual(user.email, email)
self.assertTrue(user.check_password(password))
def test_user_email_normalized(self):
"""Testing email normalize function"""
test_emails = [
['test1@EXAMPLE.Com', 'test1@example.com'],
['TesT2@exaMple.com', 'TesT2@example.com'],
]
for email, expected in test_emails:
user = get_user_model().objects.create_user(email, 'password123')
self.assertEqual(user.email, expected)
user.delete()
Создается пользователь с тем же username
. Вы унаследовали это от родительской модели и не удалили поле username
. Вы должны указать его как None
, так:
class User(AbstractUser, PermissionsMixin):
"""User model"""
username = None
# …
В тестах вы, таким образом, не должны удалять user
: система должна быть способна регистрировать несколько пользователей с каждым отдельным email
.