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

如何修改Django模型类的字符串表示以适配多语言翻译需求

解决方案

你遇到的场景是Django内置逻辑调用了模型类的显示名称而非实例的字符串表示,可通过以下两种方式实现需求,完全适配本地化翻译规范:

方式一:配置模型Meta属性(推荐,覆盖99%内置场景)

Django所有官方组件(包括表单校验、Admin后台等)默认读取模型Meta类的verbose_name属性作为模型类的显示名称,搭配国际化翻译工具即可实现本地化,无需修改原始类名:

from django.db import models
from django.utils.translation import gettext_lazy as _

class Company(models.Model):
    name = models.CharField(max_length=100)
    email = models.EmailField(unique=True)

    def __str__(self):
        return self.name

    class Meta:
        # 单数形式的模型显示名,会被自动用于你遇到的唯一性校验错误提示场景
        verbose_name = _("公司")
        # 复数形式的模型显示名,用于多实例场景的提示
        verbose_name_plural = _("公司")

配置后你遇到的重复邮箱校验错误,会自动将原提示中的Company替换为你翻译后的公司(若配置多语言会随用户语言环境自动切换)。

方式二:自定义模型类的字符串表示

若你确实需要修改直接打印模型类(如print(Company))时的输出内容,可通过自定义模型元类实现:

from django.db import models
from django.db.models.base import ModelBase
from django.utils.translation import gettext_lazy as _

class TranslatedModelNameMeta(ModelBase):
    def __str__(cls):
        return str(cls._meta.verbose_name)

class Company(models.Model, metaclass=TranslatedModelNameMeta):
    name = models.CharField(max_length=100)
    email = models.EmailField(unique=True)

    def __str__(self):
        return self.name

    class Meta:
        verbose_name = _("公司")
        verbose_name_plural = _("公司")

该方式下直接执行print(Company)会输出公司而非默认的<class 'xxx.models.Company'>。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 11:27:04