gpt4 book ai didi

python - Django orm - 如何在不同日期的查询中获取不同的字段项

转载 作者:行者123 更新时间:2023-11-29 12:08:08 30 4
gpt4 key购买 nike

我有以下模型:

class Event(models.Model):
date = models.DateTimeField()
event_type = models.ForeignKey('EventType')

class EventType(models.Model):
name = models.CharField(unique=True)

我正在尝试获取所有日期的列表,以及该日期可用的事件类型。

列表中的每个项目都是一个包含两个字段的字典:dateevent_types,这将是该日期可用的不同事件类型的列表。

目前我想出了一个查询来获取所有不同日期的列表,但这只是我想做的事情的一半:

query = Event.objects.all().select_related('event_type')
results = query.distinct('date').order_by('date').values_list('date', flat=True)

现在我可以稍微更改它以获得所有不同日期 + event_type 组合的列表:

query = Event.objects.all().select_related('event_type')
results = query.order_by('date').distinct('date', 'event_type').values_list('date', 'event_type__name')

但是对于给定日期内的每种事件类型,这将有一个条目。我需要在每个日期内汇总一个列表。

有没有一种方法可以构造查询集来执行此操作?如果不是,我将如何通过其他方式来获得相同的结果?

最佳答案

您可以使用 itertoolsgroupby 函数执行此类聚合。要求元素出现在关于“石斑鱼标准”的“ block ”中。但这里就是这种情况,因为您使用了 order_by

因此我们可以这样写:

<b>from itertools import groupby
from operator import itemgetter</b>

query = (Event.objects.all.select_related('event_type')
.order_by('date'<b>, 'event_type'</b>)
.distinct('date', 'event_type')
.values_list('date', 'event_type__name'))
result = [
{ 'date': k, 'datetypes': [v[1] for v in vs]}
for k, vs in <b>groupby(query, itemgetter(0))</b>
]

您还最好按标准使用 'event_type'

这将导致如下结果:

[{'date': datetime.date(2018, 5, 19), 'datetypes': ['Famous person died',
'Royal wedding']},
{'date': datetime.date(2018, 5, 24), 'datetypes': ['Famous person died']},
{'date': datetime.date(2011, 5, 25), 'datetypes': ['Important law enforced',
'Referendum']}]

(基于 5 月最后几天的快速维基百科扫描)。

groupby 以线性时间与返回的行数一起工作。

关于python - Django orm - 如何在不同日期的查询中获取不同的字段项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50729034/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com