Django模型组(按日期时间的d)

2024-05-19 23:26:22 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有这样一个模型:

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

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

这怎么能以一种Python的方式实现呢?

谢谢


Tags: 模型实体列表modeltimemodels方式时间
2条回答

我同意答案:

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

但还有一点是: date()的参数不能使用双下划线组合外键字段, 必须使用table\u name.field\u name

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

产品是表名

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

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

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

然后可以与^{}一起使用:

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)]

相关问题 更多 >