Как отфильтровать объект, имеющий один из двух внешних ключей в отношениях "один ко многим" в Django
У меня есть модели городов и маршрутов
class City(LocationAbstractModel):
name = models.CharField(max_length=255)
def __str__(self):
return self.name
class Route(BusAbstractModel):
leaving_from = models.ForeignKey(location_models.City, on_delete=models.CASCADE, related_name='leaving_from')
destination = models.ForeignKey(location_models.City, on_delete=models.CASCADE, related_name='destination')
distance = models.IntegerField(null=True, blank=True)
prices = models.ManyToManyField(carrier_models.Carrier, through="RoutePrice")
crossing_cities = models.ManyToManyField(location_models.City, blank=True)
def price(self, carrier_id):
return self.routeprice_set.filter(carrier_id=carrier_id).order_by('created_at').first().price
def __str__(self):
return self.leaving_from.name + " -> " + self.destination.name
Как я могу запросить только города, которые имеют одно из отношений в модели маршрутов. Я хочу отфильтровать города, в которых есть отношение leaving_from или destination ship.
Я пытался
models.City.objects.filter(Q(route__leaving_from__isnull=False) |Q(route__destination__isnull=False)).distinct()
но он возвращает только города, которые имеют отношение как к пункту_отправления, так и к пункту назначения.
Как я могу фильтровать города, которые имеют одно из отношений