Python 将模型更改为从抽象基类继承,而不更改数据库
我有一个简单的产品模型,如下所示:Python 将模型更改为从抽象基类继承,而不更改数据库,python,django,inheritance,django-models,abstract-base-class,Python,Django,Inheritance,Django Models,Abstract Base Class,我有一个简单的产品模型,如下所示: class Product(models.Model): name = models.CharField(max_length=80) # other attributes class BaseProduct(models.Model): name = models.CharField(max_length=80) class Meta(object): abstract = True 我们已经推出了这个
class Product(models.Model):
name = models.CharField(max_length=80)
# other attributes
class BaseProduct(models.Model):
name = models.CharField(max_length=80)
class Meta(object):
abstract = True
我们已经推出了这个,并有一个数据库,其中填写了这些字段。我想将此模型更改为从基类继承,如下所示:
class Product(models.Model):
name = models.CharField(max_length=80)
# other attributes
class BaseProduct(models.Model):
name = models.CharField(max_length=80)
class Meta(object):
abstract = True
并修改产品类别,如下所示:
class Product(BaseProduct):
# other attributes
基于我对抽象基类的理解,这两个设置将创建相同的表(对吗?)。所以从技术上讲,在改变了这个模型之后,我不需要对数据库做任何修改。但是,当我尝试使用South应用它时,它希望删除Product表的“name”列
因为我们已经推出了这些表,所以理想情况下我希望保留“name”列,而不是使用其他解决方案(如OneToOneField)
谢谢 您不能覆盖Django中同名的模型字段,这就是South要求您从子类中删除“name”字段的原因。有关更多详细信息,请参阅
您可能需要从每一行导出现有名称,并将它们映射回更新的表中(可能使用行id作为键)。是否要保留相同的列并仅覆盖行为?仅对于Django,该代码看起来很好。
manage.py sql
的输出在两个版本中看起来是否相同?我怀疑南方有什么东西搞混了。可能相关:向我展示生成的SchemeMigrationDjango和South的哪些版本?另外,当你“尝试使用South应用它”时,你到底在做什么?如果您做了一个像您描述的那样的更改并运行了manage.py schemamigration--auto
South应该说“似乎没有任何更改”,但是如果确实生成了迁移,您能为我们发布迁移的forwards
方法吗?