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_fr
和 label_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-modeltranslation
和 jet-django
应用程序,后者提供一个 API 被 JET Admin UI 使用并用于进行模型查找.
我不知道我的问题是否必须在 jet-django 本身中解决,或者 django 是否提供了类似阴影字段的功能。
django-modeltranslation 使用注册方法,描述为 here,这意味着当您第一次启动 django 应用程序时,所有模型都会被修补。在初始化 django-modeltranslation 之后,Post._meta.fields
除了 text
.
之外还包含翻译字段 text_fr
和 text_de
查看 jet-django,应用程序启动时似乎也初始化了 JetAdminModelDescription
,使用 Model._meta.get_fields()
检索了实际模型字段 here。
所以只要在 django-modeltranslations 之后初始化 jet-django,这些字段也应该对 JetAdmin 可用。
确保将 jet-django after django-modeltranslation 放在 INSTALLED_APPS
设置中,它应该可以工作。
我使用的 CMS 在运行时通过 API 对我的模型进行映射。
它工作正常,除了本地化字段,因为我使用 https://django-modeltranslation.readthedocs.io/en/latest/registration.html 添加显然未映射的 "shadow" 字段(它们不存在于模型本身,但通过 "register")
有什么方法可以告诉我的模型它拥有这些字段吗?
它可以找到 label
字段,但找不到在运行时动态添加的 label_fr
和 label_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-modeltranslation
和 jet-django
应用程序,后者提供一个 API 被 JET Admin UI 使用并用于进行模型查找.
我不知道我的问题是否必须在 jet-django 本身中解决,或者 django 是否提供了类似阴影字段的功能。
django-modeltranslation 使用注册方法,描述为 here,这意味着当您第一次启动 django 应用程序时,所有模型都会被修补。在初始化 django-modeltranslation 之后,Post._meta.fields
除了 text
.
text_fr
和 text_de
查看 jet-django,应用程序启动时似乎也初始化了 JetAdminModelDescription
,使用 Model._meta.get_fields()
检索了实际模型字段 here。
所以只要在 django-modeltranslations 之后初始化 jet-django,这些字段也应该对 JetAdmin 可用。
确保将 jet-django after django-modeltranslation 放在 INSTALLED_APPS
设置中,它应该可以工作。