Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.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
Django 用于在层次结构中插入模型的模式迁移示例_Django_Django South - Fatal编程技术网

Django 用于在层次结构中插入模型的模式迁移示例

Django 用于在层次结构中插入模型的模式迁移示例,django,django-south,Django,Django South,绞尽脑汁想知道如何做到这一点:我很想看看以前做过这件事的人的例子 假设,在: class A(models.Model): pass class B(A) pass 我想了解的情况是: class A(models.Model): pass class C(A): pass class B(C): pass 我该怎么写《南方移民》呢?我需要进行“数据迁移”吗?以下是我最终解决问题的方法(这是一个4步过程)。我仍然有兴趣看看这是否可以改进/简化 1

绞尽脑汁想知道如何做到这一点:我很想看看以前做过这件事的人的例子

假设,在:

class A(models.Model):
    pass

class B(A)
    pass
我想了解的情况是:

class A(models.Model):
    pass

class C(A):
    pass

class B(C):
    pass

我该怎么写《南方移民》呢?我需要进行“数据迁移”吗?

以下是我最终解决问题的方法(这是一个4步过程)。我仍然有兴趣看看这是否可以改进/简化

1) 将新模型创建为独立模型,例如

class C(models.Model):
    pass
然后执行自动模式迁移(例如:
schemamigration app\u name--auto

2) 使用自定义数据迁移,使用
class A
中的数据填充新模型
C
。例如运行
datamigration app\u name populate\u C
创建迁移框架,并使用
a
中的现有
id
填充新模型的
id

def forwards(self, orm):
    for a in orm.A.objects.all():
        c = orm.C(id=a.id)
        c.save()
3) 现在执行一个自定义的
schemamigration
(通过指定
--empty
标志),并将
app_name_c
中的
id
列从
id
重命名为
a_ptr_id
,例如:

def forwards(self, orm):
    db.rename_column('app_name_c', 'id', 'a_ptr_id')
此时,您可以将
类C(models.Model)
更改为
类C(A)
,因为基础表现在反映了这一新的现实

4) 执行最后一个自定义模式迁移,将“app_name_b”的“a_ptr_id”列重命名为“b_ptr_id”,例如:

def forwards(self, orm):
    db.rename_column('app_name_b', 'a_ptr_id', 'b_ptr_id')
在这一点上,您可以将
B类(A)
更改为新的现实,即
B类(C)


运行迁移,您已经更新了层次结构

只需指出:您正在使用数据迁移进行模式更改。如果您正在更改数据库表结构,那么它们应该是架构迁移,而不是数据迁移。基本上,如果您使用的是
south.db.db.*
,这是一种模式迁移。@MatthewSchinckel感谢您指出这一点。我不知道您可以通过指定
--empty
标志来进行自定义模式迁移。根据您的反馈,我正在更新答案,以便第3步和第4步是定制的
schemamigration