首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使现有字段可翻译(Django)

使现有字段可翻译(Django)
EN

Stack Overflow用户
提问于 2016-08-31 05:18:53
回答 1查看 526关注 0票数 2

我正在尝试翻译一个模型类上已经存在的字段。我在第一步就被卡住了,那就是在Category中子类化TranslatableModel类,并添加TranslatedFields包装器来翻译选定的模型字段。我正在阅读一本名为“django by Example”的书,以及关于如何做到这一点的django-parler instructions,但是我得到了以下错误:

代码语言:javascript
复制
File ..../env/lib/python3.5/site-packages/parler/models.py", line 965, in contribute_translations
raise TypeError("The model '{0}' already has a field named '{1}'".format(shared_model.__name__, name))
TypeError: The model 'Category' already has a field named 'name'

在应用django-parler之前:

代码语言:javascript
复制
# models.py
class Category(models.Model):
    name = models.CharField(max_length=200,
                            db_index=True)
    slug = models.SlugField(max_length=200,
                            unique=True)
    class Meta:
        ordering = ('name',)
        verbose_name = 'category'
        verbose_name_plural = 'categories'

    def __str__(self):
        return self.name

    def get_absolute_url(self):
        return reverse('shop:product_list_by_category',
                       args=[self.slug])

应用django-parler之后:

代码语言:javascript
复制
# models.py
class Category(TranslatableModel):
    name = models.CharField(max_length=200,
                            db_index=True)
    slug = models.SlugField(max_length=200,
                            unique=True)
    translations = TranslatedFields(
        name = models.CharField(max_length=200,
                                db_index=True),
        slug = models.SlugField(max_length=200,
                                unique=True),
    )
    class Meta:
        # ordering = ('name',)
        verbose_name = 'category'
        verbose_name_plural = 'categories'

    def __str__(self):
        return self.name

    def get_absolute_url(self):
        return reverse('shop:product_list_by_category',
                       args=[self.slug])
EN

回答 1

Stack Overflow用户

发布于 2018-03-26 00:34:00

好的,从你的代码判断,你正在尝试遵循Antonio Mele的"Django by Example“……我也遇到了同样的问题。我的解决方法是在原始模型中的所有字段前加上下划线,所以...

名称= models.CharField(max_length=200,db_index=True)...变成_name = models.CharField(max_length=200,db_index=True)

此外,一些研究表明,从Django 1.9开始,有一个改名为..根据https://github.com/django-json-api/django-rest-framework-json-api/issues/176的ReverseSingleRelatedObjectDescriptor

我在下面的文件"/Django/local/lib/python2.7/site-packages/parler/models.py"..中将import和另一个条件语句引用(第782行)从'ReverseSingleRelatedObjectDescriptor‘改为'ForwardManyToOneDescriptor’但我不确定最后一步是否真的有必要,我认为更名就足够了??祝你好运……

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39237246

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档