【问题标题】:Get list of occurrences + count in a model Django?获取模型 Django 中的出现次数列表+计数?
【发布时间】:2012-10-10 04:16:24
【问题描述】:

假设我有以下模型:

class Person(models.Model):
    ...other stuff...
    optional_first_name= models.CharField(max_length=50, blank=True)

我将如何编写一个请求,以返回最流行的名称数组,按出现的降序排列,并忽略空名称?

即对于包含 13 个 Leslies、8 个 Andys、3 个 Aprils、1 个 Ron 和 18 个未指定姓名的人的数据库,输出将是:

[('leslie', 13), ('andy', 8), ('april', 3), ('ron', 1)]

我能得到的最接近的方法是执行以下操作:

q= Person.objects.all()
q.query.group_by=['optional_first_name']
q.query.add_count_column()
q.values_list('optional_first_name', flat= True)

但这仍然不是我想要的。

【问题讨论】:

    标签: django


    【解决方案1】:

    经过一番挖掘,终于发现:

    Person.objects.values('optional_first_name').annotate(c=Count('optional_first_name')).order_by('-c')
    

    【讨论】:

    • 您可能还想.exclude(optional_first_name='')
    • 如何对这个查询应用一些过滤器?只过滤以“A”开头的名称
    • @KiranTelukunta Person.objects.filter(optional_first_name__startswith='A').values('optional_first_name').annotate(c=Count('optional_first_name')).order_by('-c')
    • @AksharRaaj 您的回答正是我所需要的。谢谢你。但在我的模板中,它返回这个''。请我如何清理它以仅返回“4”,因为这是我在模板中需要的数字?这是我在views.py 'count_ebola = MedicalInfo.objects.filter(illnesses__name__exact='Malaria').values('illnesses').annotate( c=Count('illnesses'))'中的代码
    猜你喜欢
    • 2018-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多