Я использую tastypie для получения REST API для моего приложения django. Мои модели включают в себя станцию (например, железнодорожную станцию), маршрут (например, Чикаго до Сент-Луиса) и routedetail, который является промежуточной моделью для многих отношений, например. RouteDetail (станция = "Springfield-IL", маршрут = "CHI-СТЛ", arrival_time = 4:00 вечера, depart_time = 4: 5 вечера)django query on manytomany field
class Station(models.Model):
name = models.CharField(max_length=10, unique=True)
class Route(models.Model):
name = models.CharField(max_length=10, unique=True)
stations = models.ManyToManyField(Station, through='RouteDetail')
class RouteDetail(models.Model):
station = models.ForeignKey(Station)
route = models.ForeignKey(Route)
arrival_time = models.TimeField(blank=True, null=True)
depart_time = models.TimeField(blank=True, null=True)
Мой вопрос, как я могу запросить все маршруты из Линкольн, штат Иллинойс в Сент-Луис, Миссури? Прямо сейчас я сделал что-то подобное в tastypie, которое работает, но есть ли способ сделать это в одном запросе?
from_station = request.GET.get('from', None)
to_station = request.GET.get('to', None)
semi_filtered = super(RouteResource, self).apply_filters(request, applicable_filters)
return semi_filtered.filter(stations__name=from_station).filter(stations__name=to_station)
Вы правы Мне нужно сравнить arrival_time, чтобы определить, является ли это от A до B. Я не включал это, так как я хотел сосредоточиться на сокращении запроса при фильтрации из и в два раза. В любом случае, ваше предложение о том, чтобы перейти на сырой SQL, представляется разумным выбором, если позже я обнаружил, что эта операция является бутылочной горловиной. Благодарю. –