Django模型组按日期时间的日期

时间:2010-08-02 14:12:43

标签: python django django-models

假设我有这样的模型:

class Entity(models.Model):
    start_time = models.DateTimeField()

我想将它们重新组合为列表列表,其中每个列表列表包含来自同一日期的实体(同一天,时间应该被忽略)。

如何以pythonic方式实现这一目标?

由于

2 个答案:

答案 0 :(得分:14)

创建一个小函数来仅提取日期:

def extract_date(entity):
    'extracts the starting date from an entity'
    return entity.start_time.date()

然后您可以将其与itertools.groupby

一起使用
from itertools import groupby

entities = Entity.objects.order_by('start_time')
for start_date, group in groupby(entities, key=extract_date):
    do_something_with(start_date, list(group))

或者,如果你真的想要一份清单:

entities = Entity.objects.order_by('start_time')
list_of_lists = [list(g) for t, g in groupby(entities, key=extract_date)]

答案 1 :(得分:7)

我同意答案:

Product.objects.extra(select={'day': 'date( date_created )'}).values('day') \
               .annotate(available=Count('date_created'))

但还有另外一点: date()的参数不能使用双下划线组合foreign_key字段, 你必须使用table_name.field_name

result = Product.objects.extra(select={'day': 'date( product.date_created )'}).values('day') \
           .annotate(available=Count('date_created'))

和product是table_name

此外,您可以使用“print result.query”查看CMD中的SQL。