You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django TestCase中如何断言查询返回的对象存在?

问题解决:断言数据库对象存在的正确方式

首先明确报错原因:filter().first()方法返回的是匹配查询的单个对象实例(有匹配时)或None(无匹配时),它不是可迭代/集合类型,因此无法用len()获取长度,这就是触发TypeError的原因。

以下是几种正确的断言方式:

  • 直接断言对象存在(不为None):

    def test_invalid_trip_location_field_value(self):
        trip_location_field = TripLocationField.objects.filter(name='Fiji').first()
        self.assertIsNotNone(trip_location_field)
    
  • 若需同时验证对象的字段值:

    def test_invalid_trip_location_field_value(self):
        trip_location_field = TripLocationField.objects.filter(name='Fiji').first()
        self.assertIsNotNone(trip_location_field)
        self.assertEqual(trip_location_field.name, 'Fiji')
    
  • 若要确认数据库中恰好有1个匹配对象(兼顾数量验证):

    def test_invalid_trip_location_field_value(self):
        # 先验证匹配数量
        self.assertEqual(TripLocationField.objects.filter(name='Fiji').count(), 1)
        # 再获取并断言对象存在
        trip_location_field = TripLocationField.objects.filter(name='Fiji').first()
        self.assertIsNotNone(trip_location_field)
    

内容的提问来源于stack exchange,提问作者AlxVallejo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 05:23:09