Django 1.11使用modeltranslation翻译字段时Admin面板多显示原字段问题
解决Django 1.11中django-modeltranslation Admin显示多余字段的问题
嘿,我之前在Django 1.11使用modeltranslation时也碰到过一模一样的问题——Admin面板里同时冒出来原生字段和翻译字段,看着特别混乱。这主要是因为你没正确集成modeltranslation提供的专属Admin类,下面给你一步步修复:
1. 补全translation.py的正确配置
你的translation.py看起来没写完,得确保它完整配置了Country模型的翻译规则:
from modeltranslation.translator import register, TranslationOptions from events.models import Country @register(Country) class CountryTranslationOptions(TranslationOptions): fields = ('name',) # 指定要做翻译的字段就是name languages = ('en', 'fr') # 明确声明支持英语和法语
2. 修改Admin类,继承TranslationAdmin
默认的ModelAdmin不知道怎么关联原生字段和翻译字段,所以得换成modeltranslation提供的TranslationAdmin,它会自动隐藏原生的name字段,只展示带有语言标签的翻译输入框:
from django.contrib import admin from modeltranslation.admin import TranslationAdmin from .models import Country class CountryAdmin(TranslationAdmin): # 列表页直接用name就行,TranslationAdmin会自动适配当前语言显示内容 list_display = ('name',) # 如果非要在列表页单独显示英法字段,也可以写成 ('name_en', 'name_fr') admin.site.register(Country, CountryAdmin)
3. 最后检查几个关键配置
- 确保
settings.py里已经把modeltranslation加到INSTALLED_APPS中:
INSTALLED_APPS = [ # 你的其他应用... 'modeltranslation', ]
- 运行迁移命令,确保翻译字段已正确同步到数据库:
python manage.py makemigrations python manage.py migrate
- 清除浏览器缓存或者用无痕模式打开Admin,有时候旧页面缓存会让问题迟迟不消失。
这么操作之后,Admin的表单页就只会显示带英语、法语标签的name输入框,不会再出现多余的原生name字段啦。
内容的提问来源于stack exchange,提问作者user9192656
相关产品推荐
相关产品推荐

