我有兩個模型,它們之間有許多聯系。文章和標簽模型。兩者都是使用 django-parler 的 TranslateableModel。
models.py
class Article(BaseModelMixin, TranslatableModel)。
translations = TranslatedFields(
title=models.CharField(max_length=255)。
short_description=models.CharField(max_length=255)。
body=HTMLField()。
slug=models.SlugField(max_length=255, blank=True, null=True, unique=True)。
),
tags = models.ManyToManyField("Tag", related_name="arts")
class Tag(TranslatableModel)。
translations = TranslatedFields(
slug=models.SlugField(max_length=55, blank=True, null=True) 。
name=models.CharField(_("Tag name"/span>), max_length=50)。
)
我想獲得所有的標簽和當前語言的文章數
。例如,如果一個用戶來到/en/blog頁面,我希望他們能看到標簽和該標簽的英文文章數量。比如Django(7篇),Ruby on rails(4篇)對于Django可能有10篇文章,但只有7篇被翻譯成英文。
我的情況是這樣的:
Tag.objects.translated()
.annotate(articles_count=(Count("articles__translations") ))
但這給我的是總翻譯數。如果一篇文章既有英文又有法文,它就會被計算成雙倍。
我怎樣才能讓它在給定的標簽中只給我當前語言的文章數量?
uj5u.com熱心網友回復:
你可以在language_code上過濾,所以:
from django.utils.translation import get_language
language = get_language()
Tag.objects.annotate(
articles_count=Count(
'articles__translations'。
filter=Q(arts__translations__language_code__iexact=language)
)
)
這將只保留具有完全相同語言代碼的文章。因此,這意味著如果語言是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)
)
)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/323527.html
標籤:
