Итак, у меня есть эти модели 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).Я хочу получить, учитывая начало и конец, путешествия, которые проходят через данное начало и затем через данный конец.Например, если origin и end равны (B, D), пример перемещения действителен, поскольку он проходит через B в некоторой точке, а затем проходит через D позже, но он не будет действительным для (D, B).
Я знаю, что в SQL это можно сделать следующим образом (при условии, что идентификаторы и сегменты магазинов путешествий имеют ограничения по внешнему ключу):
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