我寫了一個測試用例來檢查我需要一個教師對象的視圖。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個贊
回溯顯示此行失?。?/p>
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
提交
取消