Django modeltranslation无法获取和查看原始字段

2024-05-20 16:25:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试在我的项目中使用django-modeltranslation。在

现在,只针对具有一个字段的Tag模型-name。在

我创建并注册了TranslationOptions,然后是makemigrations和{}。在

现在我无法访问原始的name文本。它似乎被替换为“”(空字符串),但它不是:

In [6]: Tag.objects.first()
Out[6]: <Tag: >

In [7]: Tag.objects.first().name
Out[7]: u''

In [8]: Tag.objects.first().__dict__
Out[8]: 
{'_state': <django.db.models.base.ModelState at 0x7fc96ad41710>,
 'id': 1,
 'name': u'Sport',
 'name_cs': None,
 'name_de': None,
 'name_en': None,
 'name_es': None,
 'name_fr': None,
 'name_ru': None,
 'name_sk': None}

In [9]: Tag.objects.first().name
Out[9]: u''

你知道如何访问字段吗?在

编辑

模型.py

^{pr2}$

翻译.py

from modeltranslation.translator import register, TranslationOptions

from tags.models import Tag


@register(Tag)
class TagsTranslationOptions(TranslationOptions):
    fields = ('name',)

设置.py

USE_I18N = True
USE_L10N = False
gettext = lambda x: x

LANGUAGE_CODE = 'en'
LANGUAGES = [
    ('en', gettext('EN')),
    ('fr', gettext('FR')),
    ('es', gettext('ES')),
    ('de', gettext('DE')),
    ('ru', gettext('RU')),
    ('sk', gettext('SK')),
    ('cs', gettext('CZ')), ]

相同的问题出现在Admin

enter image description here

详细信息: enter image description here


Tags: djangonameinpy模型noneobjectsmodels
1条回答
网友
1楼 · 发布于 2024-05-20 16:25:15

根据documentation

Reading the value from the original field returns the value translated to the current language.

这意味着tag.name不返回tag.__dict__['name'],而是{}(假设英语是一种活动语言)。在

看起来您已经将modeltranslation添加到现有项目中,并且拥有现有数据。为了使模型转换正常工作,您需要运行update_translation_fields,这是一个由应用程序(documentation link)提供的管理命令。它将数据从原始字段复制到默认翻译字段(从title复制到title_en)。在

相关问题 更多 >