イベント + 日付タイプのテーブル デザインがあります。
Class Event
...
Class EventDate
...
date = models.DateField()
event = model.ForeignKey(Event)
class Meta:
unique_together = ('date', 'event')
もう起こっていないイベント、つまり今日から期限切れになったイベントを見つけようとしています。
次のクエリセットを試しました:
Event.objects.filter(dates_set__date__lt =
datetime.date.today()).exclude(dates_set__date__gte = datetime.date.today())
SQL クエリは、サブクエリのせいで奇妙に思えます。また、高価に見えます。
SELECT … FROM "events" INNER JOIN "event_dates" ON ("events"."id" =
"event_dates"."events_id") WHERE ("event_dates"."date" < '2013-05-02' AND NOT
(("events"."id" IN (SELECT U1."event_id" FROM "event_dates" U1 WHERE (U1."date"
>= '2013-05-02' AND U1."event_id" IS NOT NULL)) AND "events"."id" IS NOT NULL)))
これは正しいです?