如何解决Django-如何注释不同值的count
我有以下模型:
class Bank(model.Model):
name: models.CharField
....
使用以下示例数据:
╔══════════════╗
║ Row ID,Name ║
╠══════════════╣
║ 1,ABC ║
║ 2,ABC ║
║ 3,XYZ ║
║ 4,MNO ║
║ 5,ABC ║
║ 6,DEF ║
║ 7,DEF ║
╚══════════════╝
[('ABC',3),('XYZ',1),('MNO',('DEF',2)]
NotImplementedError: annotate() + distinct(fields) is not implemented.
我在SO上也遇到了以下问题:
std::thread::hardware_concurrency()
关于使用models.Count('name',distinct=True)
的答案,但返回的是重复值。
如何使用Django ORM处理此问题?
解决方法
您可以按查询分组,
from django.db.models import Count
qs = Bank.objects.values('name').annotate(count=Count('name'))
您将得到结果,
[{'name': 'BAR','count': 1},{'name': 'FOO','count': 3}]
,
Arakkal Abu's Answer处理了某些行,但返回了一些重复项。我不知道为什么,但是我在他的建议中添加了以下内容:
qs = Bank.objects.values('name').annotate(count=Count('id')).order_by('name').distinct()
这让我意识到引发的异常是: distinct(fields)未实现,而不是distinct()
。
此外,在@ruddra关于使用Count('name')
而不是Count('id')
的输入上,我还没有看到它们之间的区别。他们都返回了相同的结果。
所以以下内容也可以工作:
qs = Bank.objects.values('name').annotate(count=Count('name')).order_by('name').distinct()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。