Hel*_*nar 9 python django django-models
假设我有这样的模型:
class Entity(models.Model):
start_time = models.DateTimeField()
Run Code Online (Sandbox Code Playgroud)
我想将它们重新组合为列表列表,每个列表列表包含来自同一日期的实体(同一天,时间应该被忽略).
如何以pythonic方式实现这一目标?
谢谢
nos*_*klo 15
创建一个小函数来提取日期:
def extract_date(entity):
'extracts the starting date from an entity'
return entity.start_time.date()
Run Code Online (Sandbox Code Playgroud)
然后你可以用它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))
Run Code Online (Sandbox Code Playgroud)
或者,如果您真的想要一个列表列表:
entities = Entity.objects.order_by('start_time')
list_of_lists = [list(g) for t, g in groupby(entities, key=extract_date)]
Run Code Online (Sandbox Code Playgroud)
我同意答案:
Product.objects.extra(select={'day': 'date( date_created )'}).values('day') \
.annotate(available=Count('date_created'))
Run Code Online (Sandbox Code Playgroud)
但还有一点是:date()的参数不能使用双下划线组合foreign_key字段,你必须使用table_name.field_name
result = Product.objects.extra(select={'day': 'date( product.date_created )'}).values('day') \
.annotate(available=Count('date_created'))
Run Code Online (Sandbox Code Playgroud)
和product是table_name
此外,您可以使用"print result.query"来查看CMD中的SQL.
| 归档时间: |
|
| 查看次数: |
7476 次 |
| 最近记录: |