Выбрать все обратные отношения Django ORM - PullRequest
0 голосов
/ 03 апреля 2020

Мои модели такие:

class Credit(models.Model):
    name    = models.CharField(max_length=100)
    product = models.ForeignKey('Products', models.DO_NOTHING)

class CreditStatus(models.Model):
    status    = models.CharField(max_length=100)
    credit_id = models.ForeignKey('Credit', models.DO_NOTHING)

class CreditCommision(models.Model):
    comission    = models.CharField(max_length=100)
    credit_id = models.ForeignKey('Credit', models.DO_NOTHING)

Можно ли выбрать все эти таблицы в одном запросе? Обратите внимание, что я не могу изменить модель кредита.

Я пытался:

CreditStatus.objects.select_related('credit').filter(status='ACTIVE')

Но он выбирает только 2 таблицы, но мне нужно выбрать все?

1 Ответ

0 голосов
/ 03 апреля 2020

Попробуйте что-то вроде

CreditStatus.objects.select_related(
    'credit'
).filter(status='ACTIVE').prefetch_related('credit__creditcommision')

Это приведет к тому, что все кредитные комиссии будут размещены в пределах all. так, например,

credit_statuses = CreditStatus.objects.select_related(
    'credit'
).filter(status='ACTIVE').prefetch_related('credit__creditcommision')

for credit_status in credit_statuses:
    for commission in credit_status.creditcommision.all():
        print(commission)

будет запускать только попадание в базу данных только дважды, один раз, чтобы получить кредитные статусы с их кредитами, и второй, который принесет все кредитные комиссии, связанные с отфильтрованными кредитными статусами.

Вы проверяете примеры в документации

...