Внутреннее соединение Django ORM с таблицей, использующей тот же внешний ключ - PullRequest
0 голосов
/ 12 июня 2018

У меня есть три таблицы:

Table 1 : order
Fields: id, client_reference, price and status
(status is a foreignkey linked to order_status.id)

Table 2 : order_status 
Fields: id, lastupdate

Table 3 : order_status_i18n
Fields: id, order_status_id, language and label
(order_status_id is also a foreignkey linked to order_status.id)

, что я хотел бы сделать, это получить order_status_i18n label вместо order_status_id на основе языка пользователя, поэтому запрос SQL будетбыть похожим на:

SELECT o.client_reference as reference, o_s_i18n.label 
FROM 
order AS o 
INNER JOIN order_status_i18n AS o_s_i18n 
ON o.status=o_s_i18n.order_status_id WHERE o_s_i18n.language='the language';

, а Модель заказа содержит атрибут иностранного ключа, связанный с order_status model, но не order_status_i18n, поэтому я попытался использовать

Order.objects.filter(some_filters).prefetch_related('status')
.filter(status__in=OrderStatusI18N.objects.filter(language='the_language'))

, что дает мнеконфликт наборов запросов, говорящий мне, что я должен использовать набор запросов для OrderStatus вместо OrderStatusI18N, и я полностью согласен с этим.

Но в любом случае, каков будет хороший способ управления таким запросом с помощью django ORM

1 Ответ

0 голосов
/ 13 июня 2018

Я думаю, что это должно сработать.

Order.objects.filter(some_filters).prefetch_related('status').annotate(i18_label=F('status__order_status_i18n__language')).filter(status__order_status_i18n__language='en') 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...