python - django 南迁移,不设置默认值

标签 python django django-south

我使用 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/

相关文章:

list - 如何从列表中选择顺序元素?

python - 在 Python 中将动画 GIF 转换为 4D 数组

python - 如何为 if 语句编写词法分析器/解析器

django - Facebook 问题 + django

Django写入数据库,IntegrityError

python - 异步上下文管理器是否需要保护它们的清理代码不被取消?

get_absolute_url 中的 Django 完整 url

python - 控制 Django ModelForm 输出

python - 如何将 South 重新引入我的 Django 项目?

django - Django-South 迁移期间的 ValidationError