You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django如何查询django-parler多对多关联翻译模型并统计当前语言的文章数?

你的查询存在两个问题:

  1. 没有过滤关联文章的翻译语言,会把所有语言的翻译都纳入统计
  2. 直接统计articles__translations的条目数,没有按文章去重,一篇有多个翻译的文章会被多次计数

正确实现代码

先导入依赖:

from django.db.models import Count, Q
from django.utils import translation

查询语句:

# 获取当前激活的站点语言
current_language = translation.get_language()

tags = Tag.objects.translated()  # 自动获取当前语言的标签翻译内容
    .annotate(
        articles_count=Count(
            "articles",
            distinct=True,
            filter=Q(articles__translations__language_code=current_language)
        )
    )
# 可选:如果要过滤掉没有对应文章的标签,追加 .filter(articles_count__gt=0) 即可

参数说明

  • distinct=True:对关联的文章ID去重,确保同一篇文章只会被计数一次
  • filter条件:只统计存在当前语言版本翻译的文章,排除其他语言的文章统计
  • 如果需要手动指定统计的语言,直接把current_language替换为对应语言编码(比如'en'、'fr')即可,同时标签查询也可以改为Tag.objects.translated(language_code)来获取指定语言的标签内容

调用方式和你预期的一致,模板中直接使用{{ tag.name }} ({{ tag.articles_count }} articles)输出即可。


内容的提问来源于stack exchange,提问作者moddayjob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 06:18:00