我寫了一個(gè)測試用例來檢查我需要一個(gè)教師對象的視圖。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)當(dāng)我運(yùn)行“manage.py test app”時(shí),一切正常。如果我正在運(yùn)行“manage.py test”,這個(gè)錯(cuò)誤就會消失: self.model._meta.object_name students.gender.Gender.DoesNotExist: Gender matching query does not exist.由于一些外鍵,我也在其他模型測試中使用這些教師對象。那么,在每次測試之前是否有可能或需要重置 test_db?
1 回答

qq_遁去的一_1
TA貢獻(xiàn)1725條經(jīng)驗(yàn) 獲得超8個(gè)贊
回溯顯示此行失?。?/p>
gender_male = Gender.objects.get(pk=1)
您通常不應(yīng)該在代碼或測試中硬核主鍵。當(dāng)您使用 運(yùn)行所有測試時(shí)manage.py test
,對象是使用不同的主鍵創(chuàng)建的,因此get(pk=1)
失敗。
如果您確實(shí)需要在代碼中對 pk 進(jìn)行硬編碼,則需要在測試類中使用正確的 pk 創(chuàng)建對象:
gender = Gender.objects.create(pk=1, gender='Male')
但是,更好的解決方法是更改代碼,使其不使用硬編碼的 pk。
gender_male = Gender.objects.get(gender='Male')
添加回答
舉報(bào)
0/150
提交
取消