2017-06-26 4 views
0
class Route(app_core_base_model.AbstractDefaultModel): 
code = models.PositiveIntegerField(
    verbose_name=_('code'), 
    default=0, 
    editable=True) 
slug = models.SlugField(
    verbose_name=_('slug'), 
    unique=True, 
    max_length=255, 
    blank=True, 
    null=True, 
    editable=True, 
    db_index=True) 

class Route(app_core_base_model.AbstractDefaultModel): 
code = models.PositiveIntegerField(
    verbose_name=_('code'), 
    default=0, 
    editable=True) 
slug = models.SlugField(
    verbose_name=_('slug'), 
    unique=True, 
    max_length=255, 
    blank=True, 
    null=True, 
    editable=True, 
    db_index=True) 

class StopPoint(app_core_base_model.AbstractDefaultModel): 
route = models.ForeignKey(
    Route, 
    verbose_name=_('route')) 
station = models.ForeignKey(
    app_core_models.Station, 
    verbose_name=_('station')) 
arrival_time = models.TimeField(
    verbose_name=_('arrival time'), 
    blank=True, 
    null=True, 
    editable=True) 
departure_time = models.TimeField(
    verbose_name=_('departure time'), 
    blank=True, 
    null=True, 
    editable=True) 

class Station(app_core_base_model.AbstractDefaultModel): 
name = models.CharField(
    verbose_name=_('name station'), 
    max_length=255, 
    blank=True, 
    null=True, 
    editable=True) 
slug = models.SlugField(
    verbose_name=_('slug'), 
    unique=True, 
    max_length=255, 
    blank=True, 
    null=True, 
    editable=True, 
    db_index=True) 

私は到着と出発地点の地点を通過するすべてのフライトを選択することができます要求を行うことができない3つのモデル を持っています。DjangoのネストされたクエリのPostgreSQL

通過するすべてのルートと出発地点を到着地点までどのように見つけることができますか?

答えて

0

これはトリックを行う必要があります。逆FK関係を使用する必要があります。ドキュメント:| のres = https://docs.djangoproject.com/en/1.11/ref/models/fields/#django.db.models.ForeignKey.related_name

station1 = Station.objects.get(...) 
station2 = Station.objects.get(...) 
routes = Route.objects.filter(
    stoppoint_set__station=station1, 
    stoppoint_set__station=station2).distinct() 
+0

は、私は、この決定は ルート= StopPoint.objects.filter(Q(station__slug =到着) Q(station__slug =出発))は私の意見ではあまりにも悪いです望んで達成しましたセット()経路でroutes_arrivalため : routes_arrival.station.slug場合==到着:ルートでroutes_departureため : routes_departure.station.slug場合==出発: routes_arrival.route.id場合== routes_departure.route。 idとroutes_arrival.order