django - Django distinct 返回的记录多于计数
问题描述
下面显示了不同的计数是 2247
In [6]: VirtualMachineResources.objects.all().values('machine', 'cluster')
...: .distinct().count()
Out[6]: 2247
但是当我遍历它时,它返回的方式比它应该的要多:
In [4]: a = []
...: for resource in VirtualMachineResources.objects.all().values('mach
...: ine', 'cluster').distinct():
...: if resource['cluster']:
...: a.append(resource['cluster'])
...:
...:
In [5]: len(a)
Out[5]: 96953
鉴于记录的集群字段为空,当我遍历查询集时,我可以看到很多没有集群值的同一台机器的重复,但我希望只有一次。
for resource in VirtualMachineResources.objects.all().values('machine', 'cluster').distinct():
print(resource['machine'], resource['cluster'])
印刷...
server1
server1
server1
这是一个postgres数据库。有任何想法吗?在谷歌上有更多的挖掘,这似乎相关?
更新:在这里创建了一个 Django 问题
解决方案
您有一个VirtualMachineResources.Meta.ordering
混淆 ORM 的定义,因为在使用时,按列排序必须出现在SELECT
子句中DISTINCT
。使用时恰好清除了排序.count()
。
长存储短,添加一个.order_by()
以将您Meta.ordering
放在您正在迭代的查询集上,您应该很高兴。没有好的方法可以生成DISTINCT
排除 Django 的 ORM 上的排序字段的好方法,因为这需要复杂的子查询下推,如#24218中所述。
顺便说一句,当您没有尽快收到对您的问题的答复时,请避免将 Django 的票务跟踪器作为第二层支持渠道。
推荐阅读
- youtube-api - 更改 YouTube 视频 API KEY 的隐私
- javascript - 一些具有隐藏值的数据列表标签
- javascript - 如何在wordpress中对齐父项下的下拉菜单
- terraform - 如何在 github 操作中从 terraform 云生成文件中设置 KUBECONFIG
- javascript - Handling array of stateful objects in React
- r - 如何基于 R 中的两列创建假人
- javascript - 使用带有反应挂钩的 fetch API 时输入意外结束
- c# - 在同步方法中执行异步方法的困惑
- react-native - 当 redux store 更新时,React 导航弹出到顶部
- javascript - 未捕获的类型错误:无法读取未定义的属性“外国”