Django 计数具有重复值的行
Posted
技术标签:
【中文标题】Django 计数具有重复值的行【英文标题】:Django Count rows with duplicate values 【发布时间】:2019-07-12 15:30:31 【问题描述】:我正在计算 django 模型中具有重复值的行,但遇到了一点麻烦。 我看过这个问题Django Select Rows with duplicate Values
而且解决方案是完美的。但我的问题是,如果我想计算行数并根据以下方式对它们进行分组:重复行的名称,以及它被重复了多少次, 而不是只显示重复的名称行。
到目前为止我的代码:
views.py
dupes = Application.objects.values('school_name').annotate(Count('id')).filter(id__count__gt=1)
query = Application.objects.filter(school_name__in=[item['school_name'] for item in dupes])
query 变量返回一个查询集,其中包含字段 school_name 的重复值的应用程序,而这一行:
repeated_names = Application.objects.values('school_name', 'category', ).annotate(Count('id')).order_by().filter(id__count__gt=1)
返回重复学校名称的列表。
我的期望是这样的:
(school_name=school_name_1, count=2), (school_name=school_name_2, count=3)..等等
【问题讨论】:
你显然是在前端渲染这些数据吧? @ans2human 是的,没错 【参考方案1】:试试这个:
在你的Views.py
中使用这个查询集:
repeated_names = Application.objects.values('school_name', 'category').annotate(Count('id')).order_by().filter(id__count__gt=0) # <--- gt 0 will get all the objects having occurred in DB i.e is greater than 0
gt 0
将获取所有已在 DB 中发生的对象,即大于 0
在你的Template
:
% for c in repeated_names %
<ul>
<li>c.school_name</li>
<li>c.id__count</li>
<li>c.category</li>
</ul>
% endfor %
【讨论】:
这适用于client_
省略。但是我有没有办法在视图中做到这一点?
另外,我怎样才能访问同一行中其他字段的值?
@Abedy 是更新了答案,您已经在视图中执行此操作。为了获得其余的字段数据,我更新了查询。请检查
更新后的查询似乎有错误。它只显示一项。
@Abedy 使用您现在使用的查询以及您遇到的错误更新问题。我会检查的。以上是关于Django 计数具有重复值的行的主要内容,如果未能解决你的问题,请参考以下文章