我使用 south 来迁移我的 Django 模型。然而,南方有一个讨厌的错误。它不会在 Postgres 数据库中设置默认值。示例:
created_at = models.DateTimeField(default = datetime.now)
tag_id = models.PositiveIntegerField(default = 0)
South 会将这两个字段添加到数据库中,但无法设置它们的默认值,这需要手动完成。
这个bug有补丁吗?
更新
我已经尝试使用 auto_now_add=True
设置默认日期,但这也不是设置默认值。在 field 中添加 null=True
会在 south 生成的迁移脚本中添加一个 db.alter_column
。但这只是移除了 NOT NULL
约束,并没有添加默认值。整数字段也是如此
最佳答案
如果您使用以下方法自动生成迁移:
./manage.py schemamigration app_name --auto
然后您需要在实际应用之前对迁移进行小的修改。进入生成的迁移(应称为 app_name/migrations/000X__auto_add_field_foo.py
)并查找参数:
keep_default=False
在 db.add_column
调用中。只需将其更改为:
keep_default=True
Django 现在会将您的默认值应用于实际模式,以及任何现有行。如果 South 有某种设置可以默认将此参数生成为 True
,那就太好了,但没有这样的运气。您每次都需要进行此修改。
关于python - django 南迁移,不设置默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9991708/