Как написать запрос выбора в Django в цепочке отношений один ко многим? - PullRequest
1 голос
/ 15 июня 2019

Как написать запрос на выборку в django?У меня 2 отношения один-к-одному

Вначале я не очень хорош в английском.мне так жаль :).У меня есть 3 таблицы.Водитель, Автомобиль и Поездка.Отношения между водителем и автомобилем (один-ко-многим: у водителя может быть несколько автомобилей. Отношение между автомобилем и поездкой: (один-ко-многим: у автомобиля может быть несколько поездок. Я хочу список водителей, у которых есть xвремя поездок.

Мои модели:

class Driver(models.Model):
    account = GenericRelation(Account, related_query_name='drivers')

class Car(models.Model):
    owner = models.ForeignKey(Driver, on_delete=None)

class Ride(models.Model):
    car = models.ForeignKey(Car, on_delete=models.CASCADE)
    request = models.OneToOneField(RideRequest, on_delete=models.CASCADE, null=False)

Я ожидаю что-то вроде этого: <QuerySet [<Driver: 1>, <Driver: 2>]>, что является драйверами с большим или равным x Rides

1 Ответ

2 голосов
/ 15 июня 2019

Вы можете посчитать количество Ride с на Driver, а затем отфильтровать по этому числу, например:

from django.db.models import <b>Count</b>

Driver.objects.annotate(
    <b>nride=Count('car__ride')</b>
).filter(<b>nride__gte=x</b>)

Таким образом, мы сначала аннотируем каждый Driver объект с помощью Count(..) [Django-doc] связанных Ride s, затем мы отфильтруем этот набор запросов, указав, что аннотация поля nrides должна быть больше или равна x,используя поиск __gte [Django-doc] .Здесь x - это, конечно, количество требуемых поездок, которое необходимо заполнить (например, 5).

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