Как включить валидаторы в менеджере пользовательских счетов для пользовательской модели пользователя в Django?
Я создал пользовательскую модель User под названием Staff
, чтобы я мог войти в систему через электронную почту. Для этого требуется пользовательская функция create_user
, которую я создал по учебнику. Я также создал пользовательский валидатор для EmailField
, поэтому при создании пользователя принимаются только определенные домены. Однако, написав тесты для этой функции, я обнаружил, что она позволяет создавать пользователей с доменами, выходящими за рамки того, что я хочу.
Вот пользовательская функция create_user
:
class CustomAccountManager(BaseUserManager):
def create_user(self, email, first, last, password, **other_fields):
if not email:
raise ValueError('You must provide an email address')
email = self.normalize_email(email)
user = self.model(email=email, first=first, last=last, **other_fields)
user.set_password(password)
user.save()
return user
Вот как я делаю тест:
def test_new_user(self):
user = Staff.objects.create_user(email='testuser@sertronicsa.com', first='Test', last='User', password='password')
self.assertEqual(user.email, 'testuser@sertronicsa.com')
self.assertEqual(user.first, 'Test')
self.assertEqual(user.last, 'User')
self.assertFalse(user.is_superuser)
self.assertFalse(user.is_staff)
self.assertFalse(user.is_active)
with self.assertRaises(ValueError):
Staff.objects.create_user(email='', first='Test', last='User', password='password')
with self.assertRaises(ValidationError):
Staff.objects.create_user(email='test@user.com', first='Test', last='User', password='password')
Что действительно странно, так это то, что на странице администратора, если я не использую домен sertronicsa.com
, он не позволяет мне создать пользователя, как я собирался.
Мне нужна помощь в том, чтобы понять, как заставить мою функцию create_user
использовать валидатор, чтобы она выдавала ошибку в тесте. Спасибо!