Django使用Site.objects.filter查询时如何直接获取对应字符串值
Django查询直接获取字符串结果的修改方法
- 首先明确原理:
filter()方法返回的是 QuerySet 结果集合,不是单个Site模型实例,你看到的<Site: Chicago>是Django模型默认调用__str__方法输出的格式化内容,对应你Site模型中定义的返回字段(Django自带的Site模型默认返回name字段值)。
可用修改方案
方案1:确认记录一定存在时使用,写法最简单
直接用get()代替filter()获取单个实例,再取对应字段即可:
site_name = Site.objects.get(id=received_post_data.get('19282')).name
方案2:兼容记录不存在的场景,避免抛出DoesNotExist异常
先取查询结果的第一条,再判断取值:
site_obj = Site.objects.filter(id=received_post_data.get('19282')).first() site_name = site_obj.name if site_obj else ''
方案3:性能最优写法,无需加载整个模型实例
用values_list直接查询目标字段,减少数据库IO开销:
site_name = Site.objects.filter(id=received_post_data.get('19282')).values_list('name', flat=True).first() or ''
注意:如果你的
Site模型自定义了__str__方法,返回的不是name字段,把上述代码中的name替换成你实际返回的字段名即可。
内容的提问来源于stack exchange,提问作者xis10z
相关产品推荐
相关产品推荐

