【发布时间】:2010-02-04 10:15:23
【问题描述】:
我有两个模型,Location 和 Event,它们通过 Event 模型上的 ForeignKey 链接。模型分解如下:
class Location(models.Model):
city = models.CharField('city', max_length=25)
slug = models.SlugField('slug')
class Event(models.Model):
location = models.ForeignKey(Location)
title = models.CharField('title', max_length=75)
start_date = models.DateTimeField('start_date')
end_date = models.DateTimeField('end_date')
每个位置都有多个按start_date 降序排列的事件。我正在尝试进行的查询检索每个位置的下一个即将发生的事件。
理想情况下,我想在单个查询中进行此操作(我不想为每个位置运行查询,因为这会导致对数据库产生大量不必要的访问)。我尝试过使用 Django 的 ORM,也尝试过使用原始 SQL,但遇到了一些障碍。
任何帮助将不胜感激。
更新
我想出了一个潜在的解决方案,但我不相信这是最好的方法。它有效,应该足够了,但我很想知道这样做的最佳方法是什么。
不管怎样,我写的代码是这样的:
l = Location.objects.select_related()
qs = None
# Concatenate the related event querysets into a new queryset
for e in l:
if qs is None:
qs = e.event_set.all()
else:
qs = qs | e.event_set.all()
# Order a slice of the queryset by start_date ascending
qs = sorted(qs[:l.count()], key=lambda s: s.start_date)
【问题讨论】:
-
发布您的尝试代码和原始 SQL 以进行比较
-
@Gary - 我现在没有时间,但这在 Django 的 ORM 中绝对是可能的 - 不要为此投入原始 SQL。如果没有人帮助您,我会尝试稍后发布答案。