Django modeltranslation-无法获取和查看原始字段 [英] Django modeltranslation - can't get and see original fields
问题描述
我正在尝试在项目中使用django-modeltranslation
.
I'm trying to use django-modeltranslation
in my project.
目前,仅适用于具有一个字段的Tag
模型-name
.
For now, just for Tag
model with one field - name
.
我先创建并注册了TranslationOptions
,然后创建了makemigrations
和migrate
.
I've created and registered TranslationOptions
, then makemigrations
and migrate
.
现在我无法访问原始的name
文本.似乎已替换为''(空字符串),但不是:
Now I can't access the original name
text. It seems to be replaced with '' (empty string) but it isn't:
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''
您知道如何访问该字段吗?
Do you know how to access the 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. 这意味着 This means that 您似乎已将模型转换添加到现有项目中,并且具有现有数据.为了使Modeltranslation正常工作,您需要运行 It looks like you have added modeltranslation to an existing project and you have existing data. In order to get modeltranslation to work properly, you need to run 这篇关于Django modeltranslation-无法获取和查看原始字段的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
tag.name
不会返回tag.__dict__['name']
,而是返回tag.__dict__['name_en']
(假设英语是一种有效的语言).tag.name
doesn't return tag.__dict__['name']
, but rather tag.__dict__['name_en']
(assuming English is an active language).update_translation_fields
,这是应用程序提供的管理命令(update_translation_fields
, a management command supplied by the app (documentation link). It will copy the data from original field to default translated field (from title
to title_en
).