我写了一个测试用例来检查我需要一个教师对象的视图。class ShowTeacherViewTest(TestCase):@classmethoddef setUpTestData(cls): gender = Gender.objects.create(gender='Male') gender_id = gender.id Teacher.objects.create( gender_id=gender_id, first_name='Maria', last_name='Santana',)def test_view_uses_correct_template(self): teacher = Teacher.objects.first().id response = self.client.get(reverse('get_student'), {'teacher': teacher}) self.assertEqual(response.status_code, 200)当我运行“manage.py test app”时,一切正常。如果我正在运行“manage.py test”,这个错误就会消失: self.model._meta.object_name students.gender.Gender.DoesNotExist: Gender matching query does not exist.由于一些外键,我也在其他模型测试中使用这些教师对象。那么,在每次测试之前是否有可能或需要重置 test_db?
1 回答
qq_遁去的一_1
TA贡献1725条经验 获得超8个赞
回溯显示此行失败:
gender_male = Gender.objects.get(pk=1)
您通常不应该在代码或测试中硬核主键。当您使用 运行所有测试时manage.py test,对象是使用不同的主键创建的,因此get(pk=1)失败。
如果您确实需要在代码中对 pk 进行硬编码,则需要在测试类中使用正确的 pk 创建对象:
gender = Gender.objects.create(pk=1, gender='Male')
但是,更好的解决方法是更改代码,使其不使用硬编码的 pk。
gender_male = Gender.objects.get(gender='Male')
添加回答
举报
0/150
提交
取消
