如何在Django中从PostgreSQL获取含特定select值的行?
如何查询Django模型中JSON字段select值为特定值的行
首先注意你的模型里有个笔误:accoundid应该是accountid,建议修正避免后续问题。
针对你的需求,Django对PostgreSQL的JSONField支持通过**双下划线__**直接访问JSON对象内部的键,实现精准查询,具体方法如下:
1. 获取完整的模型对象
如果需要获取包含所有字段的charts对象,直接用filter过滤:
# 查询dictdata中select值为'bar'的所有行 bar_charts = charts.objects.filter(dictdata__select='bar') # 遍历结果查看详情 for chart in bar_charts: print(chart.id, chart.dictdata)
2. 只获取dictdata字段的字典列表
如果你只需要dictdata字段的数据(和你原来的需求一致),可以结合values方法:
# 注意:values里的字段名不要加空格,你原来的代码里'dictdata '多了个空格,建议修正 bar_data = list(charts.objects.filter(dictdata__select='bar').values('dictdata')) print(bar_data)
执行后输出示例:
[{'dictdata': {'select': 'bar', 'title': 'some title'}}]
原理说明
Django会把dictdata__select='bar'转换成PostgreSQL支持的JSON查询语法(类似dictdata->>'select' = 'bar'),直接在数据库层面完成过滤,效率比查询所有数据后再在Python里筛选高很多。
内容的提问来源于stack exchange,提问作者Chrollo
相关产品推荐
相关产品推荐

