Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将模型更改为从抽象基类继承,而不更改数据库_Python_Django_Inheritance_Django Models_Abstract Base Class - Fatal编程技术网

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
方法吗?