【问题标题】:How To Create A Test User Which Inherits From User如何创建继承自用户的测试用户
【发布时间】:2020-10-14 10:26:53
【问题描述】:

我有以下用户类型:

class User(AbstractUser):
    user_type = models.CharField(choices=USER_TYPES, max_length=255, default='student')

class Student(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)

在为功能测试 ID 创建用户时,通常这样做:

user = get_user_model().objects.create_user(username='test', email='test@example.com', password='passwordtest')
EmailAddress.objects.create(user=user, email="example@example.com", primary=True, verified=True)

对于此测试,我需要创建一个学生,但找不到任何有关如何执行此操作的信息。我尝试的一切,例如:

user = get_user_model().objects.create_user(username='test', email='test@example.com', password='passwordtest')
user = Student.objects.create(user=user)

导致如下错误:

django.db.utils.IntegrityError: (1062, "Duplicate entry '1' for key 'user_id'")

谢谢。

【问题讨论】:

  • 您是否覆盖了用户的保存方法,可能是为了创建学生对象或类似的东西。发布错误的完整引用
  • 啊,是的,谢谢。我前段时间创建了这个功能,并在创建用户时使用信号创建了一个学生实例。

标签: django selenium functional-testing django-testing django-tests


【解决方案1】:
django.db.utils.IntegrityError: (1062, "Duplicate entry '1' for key 'user_id'")

这意味着您的数据库已经包含一个学生,该学生使用user.id as 1 附加到您的用户(可能使用用户名“test”)

您可以简单地调用:

student = Student.objects.filter(user__username="test")
print(student)

或将get_or_create 用作:

student = Student.objects.get_or_create(user__id=1)
print(student)

或删除您的数据库并重新开始,然后调用:

user = get_user_model().objects.create_user(username='test', email='test@example.com', password='passwordtest')
user = Student.objects.create(user=user)

【讨论】:

  • 感谢您的帮助。我前段时间创建了这个功能,并在创建用户时使用信号创建了一个学生实例。
猜你喜欢
  • 2020-07-14
  • 2015-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-11
  • 2021-01-14
  • 2023-03-25
相关资源
最近更新 更多