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

在Django-Oscar中使用Django-ModelTranslation提示“未检测到新可翻译字段”

解决Django-Oscar集成Django-ModelTranslation时"No new translatable fields detected"的问题

我之前在Mezzanine项目里集成Oscar后,也碰到过一模一样的问题——Mezzanine的翻译字段正常工作,但给Oscar产品加翻译时始终提示"No new translatable fields detected",给你几个亲测有效的排查和解决方向:

1. 用正确姿势注册Oscar模型的翻译

Oscar的模型是通过它自己的加载机制管理的,直接硬导入模型注册翻译可能不生效,一定要用Oscar提供的get_model()来获取原始模型实例:

from modeltranslation.translator import register, TranslationOptions
from oscar.core.loading import get_model

# 拿到Oscar的Product模型
Product = get_model('catalogue', 'Product')

class ProductTranslationOptions(TranslationOptions):
    # 替换成你需要翻译的字段,比如title、description这些
    fields = ('title', 'description',)

# 注册翻译配置
register(Product, ProductTranslationOptions)

别去继承Oscar的模型再注册翻译,直接对原始模型操作才是正确的方式。

2. 检查INSTALLED_APPS的顺序

Modeltranslation的app必须放在所有Oscar相关app的前面,否则它没法拦截Oscar模型的初始化流程,导致检测不到字段:

INSTALLED_APPS = [
    'modeltranslation',
    # 先放Mezzanine的apps
    'mezzanine.boot',
    'mezzanine.conf',
    'mezzanine.core',
    # 再放Oscar的apps
    'oscar',
    'oscar.apps.catalogue',
    # ... 其他项目和第三方app
]

3. 清除缓存并重新生成迁移

因为你先初始化了Mezzanine,Django的模型缓存里可能已经提前加载了Oscar的模型,导致modeltranslation没捕捉到字段变化:

  • 删除项目下所有app里的迁移文件(保留__init__.py)
  • 重启开发服务器,或者执行python manage.py flush(注意:这会清空数据库,仅限测试环境使用)
  • 重新生成迁移:python manage.py makemigrations,再执行python manage.py migrate

4. 确认ModelTranslation的配置完整性

检查settings.py里的modeltranslation配置是否齐全:

# 你的目标语言列表
MODELTRANSLATION_LANGUAGES = ('en', 'zh-cn')
MODELTRANSLATION_DEFAULT_LANGUAGE = 'en'
# 指定存放翻译注册代码的文件路径
MODELTRANSLATION_TRANSLATION_FILES = (
    'your_project.translations',  # 比如你把翻译注册放在translations.py里
)

另外要确保django.middleware.locale.LocaleMiddleware在中间件列表里,并且放在CommonMiddleware之后。

5. 规避Mezzanine与ModelTranslation的加载冲突

Mezzanine自身的翻译机制可能影响Oscar模型的加载优先级,你可以把Oscar的翻译注册代码放在单独文件里,然后在项目app的ready()方法中强制导入,确保它在模型初始化前被加载:

# yourapp/apps.py
from django.apps import AppConfig

class YourAppConfig(AppConfig):
    name = 'yourapp'

    def ready(self):
        # 导入翻译注册文件
        import your_project.translations

然后在settings.py里把你的app指定为这个配置类:

INSTALLED_APPS = [
    # ...
    'yourapp.apps.YourAppConfig',
    # ...
]

如果以上方法都没解决,你可以试试执行python manage.py makemigrations --verbosity 3,查看详细日志——日志里会显示modeltranslation扫描了哪些模型、哪些字段被标记为可翻译,能帮你定位具体哪里出了问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:35:58