Django - Как сделать запрос к связанной переведенной модели?
У меня есть две модели, которые во многом связаны между собой. Модели статей и тегов. Обе являются TranslateableModel с использованием django-parler.
Я хотел бы получить все теги вместе с articles_count для текущего языка.
Например, если пользователь заходит на страницу /en/blog
, я бы хотел, чтобы он видел теги вместе с количеством статей, написанных на английском языке для этого тега. Что-то вроде Django (7 articles), Ruby on rails (4 articles)
Для django может быть 10 статей, но только 7 переведены на английский.
У меня получилось примерно следующее:
Tag.objects.translated()
.annotate(articles_count=(Count("articles__translations")))
Но это дает мне подсчет общего количества переводов. Если статья существует и на английском, и на французском языках, она считается дважды.
Как сделать так, чтобы он выдавал количество статей только на текущем языке в заданном теге?
Вы можете фильтровать по language_code
, так:
from django.utils.translation import get_language
language = get_language()
Tag.objects.annotate(
articles_count=Count(
'articles__translations',
filter=Q(articles__translations__language_code__iexact=language)
)
)
При этом сохраняются только articles
с точно таким же кодом языка. Это означает, что если язык en-US
, он не будет считать en
действительным.
Вы можете сохранить только язык, но не страну, а затем отфильтровать с помощью:
# culture-invariant languages
from django.utils.translation import get_language
language = get_language().split('-', 1)[0]
Tag.objects.annotate(
articles_count=Count(
'articles__translations',
filter=Q(articles__translations__language_code__istartswith=language)
)
)