Django从动态字段迁移

时间:2017-10-30 10:42:03

标签: python django django-migrations

我有以下Django模型:

class Apple(models.Model):
    text = models.TextField()

我已经有很多记录了,我想在模型中添加一个主题字段,所以它看起来像:

class Apple(models.Model):
    text = models.TextField()
    subject = models.CharField(max_length = 128)

。在这种情况下,我运行makemigrations,但由于subject可以为空,我需要在模型或迁移文件中设置默认值。

如果我想从现有数据库行的文本中获取主题(例如:text [:64]),那么正确的过程是什么?

我的解决方案是使用默认值创建迁移,运行管理命令以更新值,并使用新迁移删除主题的默认值。有更好的解决方案吗?它是什么?我可以在迁移本身中以某种方式组合/执行此操作吗?

Python:3.4.5 Django:1.9.2

2 个答案:

答案 0 :(得分:1)

对于包括postgresql在内的一些数据库,可以更快地添加可空字段,因此我会将您的方法更改为:

  1. 架构迁移使用null=True创建字段(无需设置默认值)
  2. data migration填充字段
  3. 架构迁移从字段中删除null=True
  4. 您可以将这三个操作合并到一个迁移文件中。但是,Django数据迁移文档建议您将它们分开。

答案 1 :(得分:0)

您可以在迁移中自行完成,在主题字段中创建一个CellLayoutMode = UseColumnSet 的迁移文件。

blank=True, null=True

然后创建另一个空的迁移文件。

class Apple(models.Model):
    text = models.TextField()
    subject = models.CharField(max_length=128, blank=True, null=True)

粘贴该文件中的代码。

python manage.py makemigrations --empty yourappname