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

使用Django modeltranslation时如何在Admin查看翻译字段默认值

你遇到的问题核心原因是:配置完modeltranslation并执行迁移后,原模型的name字段会被保留,同时会自动新增对应语言的专属字段name_en、name_es,你之前的旧数据都存在原生的name字段中,没有自动同步到默认语言对应的name_en字段,所以会出现后台输入框空白、列表页不显示的问题。

1. 查看翻译字段原有默认值

你可以通过两种方式查看:

  • 直接查询数据库:对应应用的equipment表中,name字段存储的就是原有旧数据,name_en、name_es分别存储英文、西班牙文的翻译值。
  • 通过Django Shell查询验证:
    执行python manage.py shell后运行如下代码(请将代码中的your_app替换为你自己的应用名):
from your_app.models import Equipment
# 遍历输出所有设备的字段值
for eq in Equipment.objects.all():
    print(f"原有值:{eq.name},英文翻译:{eq.name_en},西班牙文翻译:{eq.name_es}")

2. 模型列表页正常展示设备名称

按照如下步骤操作即可:

第一步:同步旧数据到默认语言翻译字段

你可以在Django Shell中执行批量更新脚本,把原有name字段的值同步到默认语言的name_en字段:

from your_app.models import Equipment
from django.conf import settings
from django.db import models

default_lang = settings.MODELTRANSLATION_DEFAULT_LANGUAGE
# 批量更新,比遍历save效率更高
Equipment.objects.update(**{f'name_{default_lang}': models.F('name')})

同步完成后,后台编辑页的英文输入框就会正常显示原有值。

第二步:配置翻译回退规则保证列表页显示

你可以在settings.py中添加如下配置,当当前访问语言没有对应翻译值时,自动回退到默认语言显示:

MODELTRANSLATION_FALLBACK_LANGUAGES = ('en',)

如果需要在列表页同时展示多语言值,也可以调整admin.py中的EquipmentAdmin配置:

class EquipmentAdmin(TranslationAdmin):
    ordering = ('name',)
    # 可根据需求自定义显示字段
    list_display = ('id', 'name_en', 'name_es')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 04:36:05