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

Mil*_*ano 0 python django django-database django-modeltranslation django-2.0

我正试图django-modeltranslation在我的项目中使用.

目前,仅适用于Tag具有一个字段的模型 - name.

我已创建并注册TranslationOptions,然后makemigrationsmigrate.

现在我无法访问原始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''
Run Code Online (Sandbox Code Playgroud)

你知道如何访问这个领域吗?

编辑

models.py

class Tag(models.Model):
    name = models.CharField(max_length=50,verbose_name=u'Tag',unique=True)


    def __unicode__(self):
        return self.name
Run Code Online (Sandbox Code Playgroud)

translation.py

from modeltranslation.translator import register, TranslationOptions

from tags.models import Tag


@register(Tag)
class TagsTranslationOptions(TranslationOptions):
    fields = ('name',)
Run Code Online (Sandbox Code Playgroud)

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')), ]
Run Code Online (Sandbox Code Playgroud)

同样的问题在于Admin:

在此输入图像描述

详情: 在此输入图像描述

Наз*_*кий 6

根据文件:

从原始字段读取值将返回转换为当前语言的值.

这意味着tag.name不会返回tag.__dict__['name'],而是tag.__dict__['name_en'](假设英语是一种活跃的语言).

看起来您已将modeltranslation添加到现有项目中,并且您已拥有现有数据.为了使模型转换正常工作,您需要运行update_translation_fields应用程序提供的管理命令(文档链接).它将从原始字段中的数据复制到默认翻译领域(从titletitle_en).