架构迁移针对应用程序中的现有列运行

Schemamigration runs for existing columns in the application

提问人:Fahim Ahmed 提问时间:6/29/2017 最后编辑:AlasdairFahim Ahmed 更新时间:6/29/2017 访问量:192

问:

假设我有一个名为 animals 的 Django 应用程序。该应用程序有一个名为“哺乳动物”的模型,如下所示

class Mammal(models.Model)
    name = models.CharField(max_length=256)
    is_active = models.BooleanField(default=True)
    date_added = models.DateTimeField(auto_now_add=True)
    date_modified = models.DateTimeField(auto_now=True)

我为上述模型运行架构迁移

./manage.py schemamigration mammal --initial

创建一个初始迁移文件,然后我按如下方式迁移它

./manage.py migrate mammal

现在,我更新模型并添加一个字段mammal_type如下所示

class Mammal(models.Model)
    name = models.CharField(max_length=256)
    mammal_type = models.CharField(max_length=63, choices=TYPE_CHOICES, default=TYPE_MAMMAL)
    is_active = models.BooleanField(default=True)
    date_added = models.DateTimeField(auto_now_add=True)
    date_modified = models.DateTimeField(auto_now=True)

我再次为上述模型运行架构迁移

./manage.py schemamigration mammal --auto
./manage.py migrate mammal

一切都很顺利。现在问题来了。我添加另一个字段灭绝,如下所示

class Mammal(models.Model)
    name = models.CharField(max_length=256)
    mammal_type = models.CharField(max_length=63, choices=TYPE_CHOICES, default=TYPE_MAMMAL)
    extinct = models.BooleanField(default=False)
    is_active = models.BooleanField(default=True)
    date_added = models.DateTimeField(auto_now_add=True)
    date_modified = models.DateTimeField(auto_now=True)

我运行架构迁移

./manage.py schemamigration mammal --auto

新的迁移文件包含以前添加的mammal_type字段的架构迁移,该字段实际上不应存在。我不确定为什么会这样。

我尝试运行特定于字段的架构迁移,这允许我仅为该字段添加迁移,但是在动态创建 M2M 表时,特定于字段的架构迁移无济于事。我需要为要创建的 M2M 表的整个应用程序运行架构迁移。

请指教

python django django-south schema-migration

评论

0赞 Exprator 6/29/2017
你用的是什么版本??为什么你不使用 makemigrations?
0赞 Fahim Ahmed 6/29/2017
我正在使用没有 makemigrations 的 Django 1.5。升级不会很快发生。有没有办法在不求助于版本升级的情况下解决这个问题?
0赞 Exprator 6/29/2017
只需告诉我一件事,其他字段保留或只有mammal_type在新的迁移文件中保留已灭绝的字段
0赞 Fahim Ahmed 6/29/2017
当我为最后一个字段“extinct”运行架构迁移时,它还会再次为“mammal_type”添加架构,该架构已在上一次迁移中添加。最后一个迁移文件转发函数应该只有一个字段灭绝db.add_column,而是也有一个mammal_type。
0赞 Exprator 6/29/2017
尝试删除选项并再次执行,我猜每次选择都会重新初始化,因此它被添加

答: 暂无答案