我有兩個模型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比較 – Pentium10 2010-02-04 10:19:43
@Gary - 我現在還沒有時間,但這絕對是肯定可能的,在Django的ORM中 - 不要放入原始SQL中。如果沒有人幫助你,我會盡量在後面發表一個答案。 – 2010-02-04 10:34:24