Spi*_*ike 10 python migration django django-south
我有一个现有的Django项目,它有几个使用基类的具体继承的模型.在仔细考虑之后,在阅读了像雅各布·卡普兰 - 莫斯这样的人对此有所说明后,在我的案例中使用这种具体的继承是不必要的.我想迁移到使用抽象基类.
使这个变得复杂的是我的网站是实时的,我有用户输入的数据.因此,在整个转换过程中,我需要保持所有数据的完整性.
我举一个更具体的例子:
APP1/models.py:
class Model1(base_app.models.BaseModel):
field1 = models.CharField(max_length=1000)
field2 = models.CharField(max_length=1000)
Run Code Online (Sandbox Code Playgroud)
APP 2/models.py:
class Model2(base_app.models.BaseModel):
field1 = models.CharField(max_length=1000)
field2 = models.CharField(max_length=1000)
Run Code Online (Sandbox Code Playgroud)
base_app/models.py:
class BaseModel(models.Model):
user = models.ForeignKey(User)
another_field = models.CharField(max_length=1000)
Run Code Online (Sandbox Code Playgroud)
APP1/models.py:
class Model1(base_app.models.BaseModel):
field1 = models.CharField(max_length=1000)
field2 = models.CharField(max_length=1000)
Run Code Online (Sandbox Code Playgroud)
APP 2/models.py:
class Model2(base_app.models.BaseModel):
field1 = models.CharField(max_length=1000)
field2 = models.CharField(max_length=1000)
Run Code Online (Sandbox Code Playgroud)
base_app/models.py:
class BaseModel(models.Model):
user = models.ForeignKey(User)
another_field = models.CharField(max_length=1000)
class Meta:
abstract = True
Run Code Online (Sandbox Code Playgroud)
现在,我的计划是首先添加abstract = True到BaseModel.然后,对于每个使用的模型BaseModel,一次一个:
首先,这会有用吗?第二,有更好的方法吗?
更新:
我的最终解决方案在这里详细描述:
http://www.markliu.me/2011/aug/23/migrating-a-django-postgres-db-from-concrete-inhe/
添加NewBaseModel,我们使用不同的名称,因此它不会与当前的非抽象名称冲突(南方实际上会删除BaseModel).
class NewBaseModel(models.Model):
user = models.ForeignKey(User)
another_field = models.CharField(max_length=1000)
class Meta:
abstract = True
Run Code Online (Sandbox Code Playgroud)将Model1和Model2设置为从NewBaseModel继承
注意:迁移时使用orm变量以使用模型模式的当前状态.
| 归档时间: |
|
| 查看次数: |
1928 次 |
| 最近记录: |