【发布时间】:2010-08-02 14:12:43
【问题描述】:
假设我有一个这样的模型:
class Entity(models.Model):
start_time = models.DateTimeField()
我想将它们重新组合为列表列表,其中每个列表列表都包含来自同一日期(同一天,时间应忽略)的实体。
如何以 Python 的方式实现这一点?
谢谢
【问题讨论】:
标签: python django django-models
假设我有一个这样的模型:
class Entity(models.Model):
start_time = models.DateTimeField()
我想将它们重新组合为列表列表,其中每个列表列表都包含来自同一日期(同一天,时间应忽略)的实体。
如何以 Python 的方式实现这一点?
谢谢
【问题讨论】:
标签: python django django-models
创建一个只提取日期的小函数:
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)]
【讨论】:
我同意这个答案:
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 是表名
另外,您可以使用“print result.query”在 CMD 中查看 SQL。
【讨论】: