【问题标题】:Group_by Django listGroup_by Django 列表
【发布时间】:2013-10-10 07:08:50
【问题描述】:

我有一个 django 模型:

class Person(models.Model):
    """" Modelo criado com referencia ao modelo remoto """

    name = models.CharField(max_length=300)
    age = models.PositiveIntegerField()
    born = models.DateField()

我想按生日对所有人进行分组(按出生日期分组)。 我正在尝试获取字典字典,如下所示:

{ 
    02-17:[
            {
               name:'Daniel',
               age:22
            },
            {
               name:'Pedro',
               age:23
            },
          ],
    05-24:[
            {
               name:'Juan',
               age:44
            }
          ]
}

一个选项是:

query = Person.objects.all().query
query.group_by = ['born']

for item in QuerySet(query=query, model=Person):
    print item

但它会返回一个列表,其中包含按日期排序的所有对象...没有分组。

我可以通过 django ORM 或使用 sql raw 来做到这一点吗? 我必须自己做吗?

【问题讨论】:

    标签: sql django group-by


    【解决方案1】:

    我在 Postgres 上对此进行了测试,extract 可能也适用于 MySQL,但我不确定它是否适用于任何其他数据库。

    from django.db.models import Count
    
    Person.objects.extra(select={'day': 'extract( day from born )', 'month': 'extract ( month from born )'}).values('day', 'month').annotate(num=Count('born'))
    

    【讨论】:

    • 嗨,我运行它并得到... django.db.utils.DatabaseError: near "from": syntax error
    • 嗨,Daniel,您使用的是哪个数据库引擎?
    • 我正在使用 sqlite3,但如果需要,我可以将其更改为其他,我应该使用什么?
    • 难题... :) 我个人更喜欢 PostgreSQL,但 MySQL 可以很好地完成这项工作。见stackoverflow.com/questions/585549/…
    猜你喜欢
    • 2015-10-28
    • 2020-05-10
    • 1970-01-01
    • 1970-01-01
    • 2018-02-15
    • 2020-11-24
    • 2020-05-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多