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

如何在Django translated fields的字段标签中显示对应语言代码

Django translated fields 自动给后台翻译字段标签追加语言代码的通用方案

你之前手动为每个语言单独配置verbose_name的方式可以实现需求,但重复代码多、后续新增语言时维护成本高,可根据需求选择以下两种通用实现方案:

方案1:自定义翻译字段基类(全局生效)

继承官方TranslatedField重写初始化逻辑,自动为每个语言的字段追加语言代码后缀,所有使用该自定义字段的模型都会自动生效:

from django.utils.translation import gettext_lazy as _
from translated_fields import TranslatedField as BaseTranslatedField

class TranslatedField(BaseTranslatedField):
    def __init__(self, *args, **kwargs):
        base_verbose_name = kwargs.pop('verbose_name', None)
        super().__init__(*args, **kwargs)
        # 遍历所有已配置的语言,自动生成带语言后缀的显示名
        for lang_code, field_options in self.language_fields.items():
            if base_verbose_name:
                field_options['verbose_name'] = f"{_(base_verbose_name)} ({lang_code})"

模型使用示例:

class YourFileModel(models.Model):
    # 只需配置基础显示名,不需要单独处理每个语言
    file_title = TranslatedField(
        models.CharField(max_length=255),
        verbose_name=_('File Title')
    )
    file_desc = TranslatedField(
        models.TextField(blank=True),
        verbose_name=_('File Description')
    )

方案2:自定义ModelAdmin基类(仅后台显示生效)

如果不需要修改字段全局的verbose_name,只需要在后台表单显示时追加语言代码,可通过重写Admin的表单生成逻辑实现:

from django.contrib import admin
from django.conf import settings

class TranslatedModelAdmin(admin.ModelAdmin):
    def get_form(self, request, obj=None, change=False, **kwargs):
        form = super().get_form(request, obj, change, **kwargs)
        # 遍历所有表单字段,匹配翻译字段命名规则(字段名_语言代码)
        for field_name, field in form.base_fields.items():
            for lang_code, _ in settings.LANGUAGES:
                lang_suffix = f"_{lang_code}"
                if field_name.endswith(lang_suffix):
                    field.label = f"{field.label} ({lang_code})"
                    break
        return form

使用时只需要让你的模型Admin继承该基类即可:

@admin.register(YourFileModel)
class YourFileModelAdmin(TranslatedModelAdmin):
    # 其他Admin配置不变
    list_display = ["id", "file_title"]

如果需要排除部分翻译字段不添加后缀,在上述逻辑中增加对应的字段名判断即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 09:18:04