Например, у меня есть модели:
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')))
Если вы знаете, как решить эту проблему по-другому, я буду рад видеть ваши примеры.