Reflection/Lookup 在 Django 模型上找不到国际化(影子)字段

Reflection/Lookup on Django model doesn't find internationalized (shadow) fields

我使用的 CMS 在运行时通过 API 对我的模型进行映射。

它工作正常,除了本地化字段,因为我使用 https://django-modeltranslation.readthedocs.io/en/latest/registration.html 添加显然未映射的 "shadow" 字段(它们不存在于模型本身,但通过 "register")

有什么方法可以告诉我的模型它拥有这些字段吗? 它可以找到 label 字段,但找不到在运行时动态添加的 label_frlabel_en

这里是 translation.py:

from modeltranslation.translator import translator, TranslationOptions

from tfp_backoffice.apps.org.models import Org


class OrgTranslationOptions(TranslationOptions):
  """
  See https://django-modeltranslation.readthedocs.io/en/latest/registration.html
  """
  fields = ('label',)
  required_languages = ('fr',)  # ex: {'de': ('title', 'text'), 'default': ('title',)}


translator.register(Org, OrgTranslationOptions)

我使用 https://github.com/jet-admin/jet-django,我注意到 /model_descriptions 端点的响应仅 returns label 字段。

我怀疑这是调用端点时调用的代码 https://github.com/jet-admin/jet-django/blob/94b0bb1451e768c7c3b6dadf9830d982914fe6c9/jet_django/views/model_description.py#L12

基本上,我已经安装了 django-modeltranslationjet-django 应用程序,后者提供一个 API 被 JET Admin UI 使用并用于进行模型查找.

我不知道我的问题是否必须在 jet-django 本身中解决,或者 django 是否提供了类似阴影字段的功能。

django-modeltranslation 使用注册方法,描述为 here,这意味着当您第一次启动 django 应用程序时,所有模型都会被修补。在初始化 django-modeltranslation 之后,Post._meta.fields 除了 text.

之外还包含翻译字段 text_frtext_de

查看 jet-django,应用程序启动时似乎也初始化了 JetAdminModelDescription,使用 Model._meta.get_fields() 检索了实际模型字段 here

所以只要在 django-modeltranslations 之后初始化 jet-django,这些字段也应该对 JetAdmin 可用。

确保将 jet-django after django-modeltranslation 放在 INSTALLED_APPS 设置中,它应该可以工作。