为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Django 测试设置中创建包含用户的记录

如何在 Django 测试设置中创建包含用户的记录

子衿沉夜 2022-12-14 20:52:32
我的 Django 应用程序中有这个模型:class ClubSession(models.Model):    location = models.CharField(max_length=200)    coach = models.ForeignKey('auth.User', on_delete=models.CASCADE)    date = models.DateTimeField(default=now)    details = models.TextField()    def __str__(self):        return self.location这个视图实现了它:class SessionListView(ListView):    model = ClubSession    template_name = 'club_sessions.html'    context_object_name = 'all_club_sessions_list'我正在尝试测试视图。我的测试类有一个setUp创建记录的:def setUp(self):    ClubSession.objects.create(location='test location',                               coach=User(id=1),                               date='2020-06-01 18:30',                               details='this is another test')当我运行我的测试时,我得到这个错误:IntegrityError: The row in table 'club_sessions_clubsession' with primary key '1' has an invalid foreign key: club_sessions_clubsession.coach_id contains a value '1' that does not have a corresponding value in auth_user.id.存在一个 ID 为 1 的用户,那么我该如何让它工作呢?我试过添加用户名,但也没有用。
查看完整描述

1 回答

?
慕村225694

TA贡献1880条经验 获得超4个赞

我强烈建议不要使用主键,尤其是因为分派主键是数据库的责任,因此会话之间可能会有所不同。


此外,测试在独立的数据库上运行,因此不会使用存储在您在开发或生产中使用的数据库中的数据。


可能最好先创建一个用户,例如:


from django.contrib.auth.models import User


# …


def setUp(self):

    user = User.objects.create(username='foo')

    ClubSession.objects.create(

        location='test location',

        coach=user,

        date='2020-06-01 18:30',

        details='this is another test'

    )


查看完整回答
反对 回复 2022-12-14
  • 1 回答
  • 0 关注
  • 56 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信