【发布时间】:2015-08-17 13:08:33
【问题描述】:
我正在尝试扩展 Oscar 应用程序,所以我分叉了它。现在跟随this example 一行又一行的尝试向ProductImage Model 类添加一个字段。
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 类的名称更改为其他名称,这将起作用,但为什么在示例中它们使用相同的名称呢?同样在未来假设我想分叉任何我想将字段添加到现有类而不是新类的应用程序。有什么我想念的吗?
【问题讨论】:
-
既然你已经fork了这个项目,你就可以修改其中的任何代码了。无需将其视为不可变框架,仅从基类继承。只需修改ProductImage的源代码即可。
-
如果我想向现有模型添加字段怎么办。我不想制作新模型,因为我将不得不进行数据迁移。我不能只是扩展现有模型还是不可能的?
-
新字段必须存储在数据库表中,因此无论是否制作新模型,迁移都是不可避免的。除非该字段可以从其他字段计算,并且不需要存储。
-
字段迁移我了解。假设当前
Product模型拥有我所有的对象。现在我想向Product模型添加一个字段,我该怎么做?如果我将扩展类命名为Product,它将引发错误。如果我把名字改成NewProduct我会丢失Product类的所有数据吗?你明白我在说什么吗?
标签: python django django-oscar