python - 将 Django 查询集转换为列表或字典
问题描述
从我的views.py我做这个查询:
var_query = DB.objects.filter(Q(user_id=str(request.user.id)) & Q(router_name='router1' )).values('router_type', 'router_ip')
工作是因为我得到了这个结果:
{'router1': set(['[{"router_type": "CISCO", "router_ip": "192.168.1.1"}]'])}
var_query 的类型是:<class 'django.db.models.query.QuerySet'>
当我用 list() 转换它时
converted = list(var_query)
这个错误:
AttributeError: 'set' object has no attribute 'iteritems'
因为当插入一个转换这个查询集到列表时:set(['
如何转换为真实列表或字典,以便我可以使用我的键或值?
解决方案
目前还不清楚你的最终目标是什么。但似乎你不必要地把事情复杂化了。我建议简化您的方法并正常过滤查询集(注意,看起来这些Q
对象在这里也是不必要的,您可以直接传递参数)。
var_query = DB.objects.filter(
Q(user_id=str(request.user.id)) & Q(router_name='router1')
)
结果将是一个实现迭代器协议的查询集对象,并且可以像列表或类似列表的对象一样正常迭代。然后,要使用您似乎感兴趣的数据中的字段,您可以执行以下操作:
var_query = DB.objects.filter(
Q(user_id=str(request.user.id)) & Q(router_name='router1')
)
for obj in var_query:
router_type = obj.router_type
router_ip = obj.router_ip
# ... do other stuff with your data.
values
除非您确实有适当的用例,否则您无需费心使用。
如果您可以提供更多上下文,我们可以改进更准确的解决方案。
推荐阅读
- c# - 如何通过 Foreach/LINQ 遍历 JObject 属性
- xml-namespaces - XSLT 处理具有多个名称空间的 XML
- mathematical-optimization - 如何在 GAMS 中使用非线性互补程序对多 OD 对网格网络进行建模
- metal - 除了映射到剪辑空间之外,顶点函数还能做什么?
- c# - 我将如何在 Unity 项目中实现此服务/dll?
- javascript - 我们如何才能只使用特定路径的 electron.protocol.interceptFileProtocol ,而不影响其他请求?
- angular - 更改组件属性中的值不会触发更改检测?但是单击组件时有效吗?
- mongodb - 如何将 luxon 时区功能加载到 mongo shell
- javascript - 基于文件名的自动完成建议
- javascript - 如何防止 IE11 中 requestAnimationFrame() 闪烁?