【发布时间】:2019-09-21 12:58:55
【问题描述】:
所以我得到了这些 Django 模型(顺便简化了代码):
class Travel(models.Model):
#there are many other fields
origin_city = CharField()
end_city = CharField()
class Segment(models.Model):
start_time = DateTimeField()
origin = CharField()
end = CharField()
travel = ForeignKey(Travel)
price = IntegerField()
所以一次旅行有一组路段,例如如果旅行是 A->B->C->D->E,那么路段是 (A,B) , (B,C) , (C ,D) 和 (D,E)。在给定起点和终点的情况下,我想获得通过给定起点然后通过给定终点的行程。例如,如果起点和终点是 (B,D),则示例旅行是有效的,因为它在某个时间点经过 B,然后再经过 D,但它对 (D,B) 无效。
我知道在 SQL 中,可以这样完成(假设旅游商店 id 和段有外键限制):
SELECT t.*
FROM travel as t, segment as s1,segment as s2
WHERE t.id = s1.travel_id AND t.id = s2.travel_id
AND s1.origin = (user given origin)
AND s2.end = (user given end)
AND s1.start_time < s2.start_time
【问题讨论】:
标签: django django-models orm django-queryset