【问题标题】:Test Django create_user of an AbstractUser without username测试没有用户名的 AbstractUser 的 Django create_user
【发布时间】:2021-10-03 03:54:04
【问题描述】:

我正在尝试在 Django 中测试用户的创建。但是我的用户模型不是标准的(电子邮件是用户名)。

models.py

from django.contrib.auth.models import AbstractUser, UserManager as AbstractUserManager

class UserManager(AbstractUserManager):
    def create_user(self, email, password=None, is_active=True, is_staff=False, is_admin=False):
        if not email:
            raise ValueError('Users must have an email address')
        user = self.model(
            email=self.normalize_email(email),
        )
        user.set_password(password)
        user.save(using=self._db)
        return user

class CustomUser(AbstractUser):
    objects = UserManager()
    username = None
    first_name = models.CharField(max_length=150)
    last_name = models.CharField(max_length=150)
    email = models.EmailField(unique=True)
    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = []

tests.py

from django.contrib.auth import get_user_model

class CustomUserTests(TestCase):
    def test_create_user(self):
        user = get_user_model()
        utilisateur = user.create_user(
            email='test@tester.com',
            password='testpass123',
        )
        self.assertEqual(utilisateur.email, 'test@tester.com')

错误 第 10 行,在 test_create_user utilisateur = user.create_user( AttributeError: type object 'CustomUser' has no attribute 'create_user'

有些东西不见了,但我不知道如何测试这个......

非常感谢

【问题讨论】:

    标签: python django unit-testing


    【解决方案1】:

    CustomUser' 没有属性 'create_user'

    create_user 不存在于 CustomUser 模型上,这就是错误的意思。该方法存在于UserManager 上,管理器在用户模型上定义为objects = UserManager()

    所以要访问该方法,需要使用user.objects.create_user

    【讨论】:

    • 非常感谢,我是初学者请见谅。
    • @mevaereR 很高兴我能提供帮助。顺便说一句,您不必为此请求宽恕,至少不会向我请求宽恕:)。如果有,请从代码中询问;-)。
    猜你喜欢
    • 2021-07-01
    • 2021-12-06
    • 2021-09-07
    • 2020-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-14
    • 2023-02-09
    相关资源
    最近更新 更多