微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Django-如何注释不同值的count

如何解决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)]

我尝试使用注释和distict,但出现以下错误

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 举报,一经查实,本站将立刻删除。