我试图扩展一个奥斯卡应用程序,所以我分叉了。现在,在this example行和行尝试将字段添加到ProductImage
模型类。
from oscar.apps.catalogue.abstract_models import AbstractProductImage
class ProductImage(AbstractProductImage):
thumbnail = models.ImageField(upload_to='images/thumbnails/')
from oscar.apps.catalogue.models import *
on runserver
我收到了错误
RuntimeError: Conflicting 'productimage' models in application
'catalogue': <class 'oscar.apps.catalogue.models.ProductImage'>
and <class 'forked_apps.catalogue.models.ProductImage'>.
我知道如果我将类ProductImage
的名称更改为其他可行的东西,但为什么在示例中他们使用相同的名称呢?同样在将来假设我想分叉任何应用程序我想将字段添加到现有类而不是新类。有什么东西我不见了吗?
答案 0 :(得分:2)
确保在使用自己的覆盖替换oscar.apps.catalogue
时,从INSTALLED_APPS
列表中删除forked_apps.catalogue
。特别是如果您致电get_core_apps()
,请务必在您为该功能提供的列表中加入public async Task<IHttpActionResult> Post(Product product)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
db.Products.Add(product);
await db.SaveChangesAsync();
return Created(product);
}
。
如果不这样做,可能会导致Django在加载覆盖之前加载Oscar的模型,这会导致重复(以及错误)。
答案 1 :(得分:0)
如果我不从oscar.apps.catalogue.models
导入任何内容,那么这些模型没有注册,因此我不会发现冲突。我正在从中导入模型(未在问题中显示),因此我发生了冲突。