我有以下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
答案 0 :(得分:1)
对于包括postgresql在内的一些数据库,可以更快地添加可空字段,因此我会将您的方法更改为:
null=True
创建字段(无需设置默认值)null=True
您可以将这三个操作合并到一个迁移文件中。但是,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