Доступ к таблице C из таблицы B, которая не связана, но имеет общую связанную таблицу A в Django ORM - PullRequest
0 голосов
/ 16 апреля 2020
class A(models.Model):
    product=models.CharFiels(...)
class B(models.Model):
    product = models.ForeignKey(A)
    b_name = models.CharFiels(...)
class C(models.Model):
    product = models.ForeignKey(A)
    c_name = models.CharFiels(...)


Я хочу получить доступ к имени в таблице B из таблицы C с идентификатором продукта согласно фильтру в C: что-то вроде этого:

objC = C.objects.filter(c_name="abc").values('product_id').first()
respective_name_in_B = B.objects.filter(product_id = objC['product_id']).values('b_name')

Как мне достичь тот же вывод в Django ORM с использованием одного запроса (как здесь я должен использовать два запроса), один раз попав в базу данных.

1 Ответ

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

Вы можете попробовать вот так:

B.objects.filter(product__c__c_name="abc").values("b_name")

Я использую reverse relationship между A и C, чтобы сделать этот запрос.

Обновление

Если вы хотите использовать первый product_id из первого C продукта, используйте Subquery:

from django.db.models import Subquery

B.objects.filter(
    product__in=Subquery(
        C.objects.filter(c_name="abc").values('product')[:1]
    )
).values('b_name')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...