Django modeltranslation - 无法获取和查看原始字段
Django modeltranslation - can't get and see original fields
我正在尝试在我的项目中使用 django-modeltranslation
。
现在,只针对 Tag
具有一个字段的模型 - name
.
我已经创建并注册了 TranslationOptions
,然后是 makemigrations
和 migrate
。
现在我无法访问原始 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''
你知道如何访问field/s吗?
编辑
models.py
class Tag(models.Model):
name = models.CharField(max_length=50,verbose_name=u'Tag',unique=True)
def __unicode__(self):
return self.name
translation.py
from modeltranslation.translator import register, TranslationOptions
from tags.models import Tag
@register(Tag)
class TagsTranslationOptions(TranslationOptions):
fields = ('name',)
settings.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
:
详情:
Reading the value from the original field returns the value translated to the current language.
这意味着 tag.name
不是 return tag.__dict__['name']
,而是 tag.__dict__['name_en']
(假设英语是一种活动语言)。
您似乎已将 modeltranslation 添加到现有项目并且您有现有数据。为了使模型翻译正常工作,您需要 运行 update_translation_fields
,应用程序提供的管理命令 (documentation link)。它将数据从原始字段复制到默认翻译字段(从 title
到 title_en
)。
我正在尝试在我的项目中使用 django-modeltranslation
。
现在,只针对 Tag
具有一个字段的模型 - name
.
我已经创建并注册了 TranslationOptions
,然后是 makemigrations
和 migrate
。
现在我无法访问原始 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''
你知道如何访问field/s吗?
编辑
models.py
class Tag(models.Model):
name = models.CharField(max_length=50,verbose_name=u'Tag',unique=True)
def __unicode__(self):
return self.name
translation.py
from modeltranslation.translator import register, TranslationOptions
from tags.models import Tag
@register(Tag)
class TagsTranslationOptions(TranslationOptions):
fields = ('name',)
settings.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
:
详情:
Reading the value from the original field returns the value translated to the current language.
这意味着 tag.name
不是 return tag.__dict__['name']
,而是 tag.__dict__['name_en']
(假设英语是一种活动语言)。
您似乎已将 modeltranslation 添加到现有项目并且您有现有数据。为了使模型翻译正常工作,您需要 运行 update_translation_fields
,应用程序提供的管理命令 (documentation link)。它将数据从原始字段复制到默认翻译字段(从 title
到 title_en
)。