Django modeltranslation-无法获取和查看原始字段 [英] Django modeltranslation - can't get and see original fields

查看:92
本文介绍了Django modeltranslation-无法获取和查看原始字段的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在项目中使用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,然后创建了makemigrationsmigrate.

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.

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

This means that tag.name doesn't return tag.__dict__['name'], but rather tag.__dict__['name_en'] (assuming English is an active language).

您似乎已将模型转换添加到现有项目中,并且具有现有数据.为了使Modeltranslation正常工作,您需要运行update_translation_fields,这是应用程序提供的管理命令(

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 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).

这篇关于Django modeltranslation-无法获取和查看原始字段的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆