首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Django-模型转换与Django-Oscar,但“未检测到新的可译字段”

使用Django-模型转换与Django-Oscar,但“未检测到新的可译字段”
EN

Stack Overflow用户
提问于 2018-04-13 16:41:22
回答 1查看 497关注 0票数 2

我正在尝试使用Django-模型翻译(0.12.2)为Django-Oscar (1.5.2)中的产品提供翻译字段。它使用Django 1.10.8。我跟踪了翻译注册模型上的文档,但仍然得到了响应:No new translatable fields detected

我不知道这是否是问题的一部分,但我首先启动了一个夹层(4.2.3)项目,然后使用Oscar的文档将Oscar集成到其中。翻译字段被完美地添加到夹层中。(编辑:将Oscar与ModelTranslation一起添加到一个新的Django项目中,响应相同,所以它不是夹层。)

下面,我展示了如何分叉奥斯卡的目录应用程序,并将其添加到settings.py中。

project/settings.py:

代码语言:javascript
复制
from oscar import get_core_apps


# Django-ModelTranslation settings

USE_MODELTRANSLATION = True
MODELTRANSLATION_FALLBACK_LANGUAGES = ('en',)

LANGUAGES = (
    ('en', _('English')),
    ('de', _('German')),
)


INSTALLED_APPS = [
    ...,
] + get_core_apps(['forked_apps.catalogue'])

project/forked_apps/catalogue/translation.py:

代码语言:javascript
复制
from modeltranslation.translator import translator, TranslationOptions
from oscar.apps.catalogue.abstract_models import AbstractProduct

class AbstractProductTranslationOptions(TranslationOptions):
    fields = ('title', 'description',)

translator.register(AbstractProduct, AbstractProductTranslationOptions)

然后,我运行了sync_translation_fields,但没有结果。我错过了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-13 19:46:04

因此,我在PyCharm上按下了PyCharm,输入了No new translatable fields detected响应,并搜索了ModelTranslation包,寻找它的来源。我在modeltranslation.management.commands.sync_translation_fields.Command.找到的这是一个包含具有以下行的句柄()的类:models = translator.get_registered_models(abstract=False)

我想,好吧,也许它不起作用,因为oscar.apps.catalogue.abstract_models.AbstractProduct有abstract=True。我想死亡的赠品是以模块本身的名义。

那么,如果不是AbstractProduct,那么正确的模型在哪里呢?我决定尝试触发另一个错误来解决它。我用我自己的abstract_models.AbstractProduct在project.catalogue.abstract_models上骑着奥斯卡的车:

代码语言:javascript
复制
from django.db import models
from django.utils.translation import get_language, pgettext_lazy
from django.utils.translation import ugettext_lazy as _

from oscar.apps.catalogue.abstract_models import AbstractProduct

class AbstractProduct(AbstractProduct):
    title = models.CharField(pgettext_lazy(u'Product title', u'Title'),
                             max_length=255, blank=True)
    description = models.TextField(_('Description'), blank=True)

from oscar.apps.catalogue.models import *

它产生了以下错误:

代码语言:javascript
复制
ERRORS:
catalogue.AbstractProduct.product_class: (fields.E304) Reverse accessor for 'AbstractProduct.product_class' clashes with reverse accessor for 'Product.product_class'.
...

它继续为20+线路,但第一个是足够的。正确的模型是产品。于是,我又去打猎,在oscar.apps.catalogue.models.Product找到了它。毫不奇怪,它看起来像这样:Product(AbstractProduct)

只剩下两件事要做。首先,我用project.forked_apps.catalogue编辑了我的project.forked_apps.catalogue:

代码语言:javascript
复制
from modeltranslation.translator import register, translator, TranslationOptions
# DELETED: from oscar.apps.catalogue.abstract_models import AbstractProduct
from oscar.apps.catalogue.models import Product

# Updated the following accordingly.
class ProductTranslationOptions(TranslationOptions):
    fields = ('title', 'description',)

translator.register(Product, ProductTranslationOptions)

其次,我运行了python manage.py sync_translation_fields。啊,真灵!

不管下一个问题是什么。

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

https://stackoverflow.com/questions/49821651

复制
相关文章

相似问题

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