Как включить валидаторы в менеджере пользовательских счетов для пользовательской модели пользователя в 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 использовать валидатор, чтобы она выдавала ошибку в тесте. Спасибо!

Вернуться на верх