1

我正在尝试扩展 Oscar 应用程序,所以我分叉了它。现在按照此示例行并尝试将字段添加到ProductImageModel 类。

from oscar.apps.catalogue.abstract_models import AbstractProductImage    
class ProductImage(AbstractProductImage):
        thumbnail = models.ImageField(upload_to='images/thumbnails/')
from oscar.apps.catalogue.models import * 

我得到了runserver错误

RuntimeError: Conflicting 'productimage' models in application 
'catalogue': <class 'oscar.apps.catalogue.models.ProductImage'> 
and <class 'forked_apps.catalogue.models.ProductImage'>.

我知道如果我将类的名称更改为其他名称,ProductImage这将起作用,但为什么在示例中它们使用相同的名称呢?同样在未来假设我想分叉任何我想将字段添加到现有类而不是新类的应用程序。有什么我想念的吗?

4

2 回答 2

2

确保您oscar.apps.catalogue从列表中删除INSTALLED_APPS何时将其替换为您自己的覆盖。特别是如果您调用get_core_apps(),请确保包含forked_apps.catalogue在您提供给该函数的列表中。

如果不这样做可能会导致 Django 在加载您的覆盖之前加载 Oscar 的模型,这将导致重复(和错误)。

于 2015-08-28T12:07:56.087 回答
0

如果我不从中导入任何内容,oscar.apps.catalogue.models则这些模型未注册,因此我不会看到冲突。我正在从中导入模型(问题中未显示),因此我遇到了冲突。

于 2015-08-18T06:36:04.387 回答