Django подзапрос - PullRequest
       8

Django подзапрос

0 голосов
/ 11 декабря 2019

Например, у меня есть модели:

class Location(models.Model):

    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    ...

class ControlPoint(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    location = models.ForeignKey(Location, related_name='+', on_delete=models.CASCADE, verbose_name='Локация')
    order = models.IntegerField(default=0)
    route = models.ForeignKey('Route', related_name='control_points', on_delete=models.CASCADE)
    ...

class Route(models.Model):

    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)

    @property
    def get_departure(self):
        return self.control_points.get(order=0)

    @property
    def get_arrival(self):
        return self.control_points.order_by('-order')[0]

    def clear_control_points(self):
        self.control_points.all().delete()


class Trip(models.Model):

    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    route = models.OneToOneField(Route, related_name='trips', null=True, on_delete=models.SET_NULL)
    user = models.ForeignKey(User, related_name='trips', on_delete=models.CASCADE)
    ...

РАЗРЕШЕНИЕ

Основано на ответе сеньжера ниже (я ему очень благодарен):

Trip.objects.filter(route_id__in=Subquery(ControlPoint.objects.filter(location_id=<location_id>).values('route_id')))

Если вы знаете, как решить эту проблему по-другому, я буду рад видеть ваши примеры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...