jer*_*use 10 python django django-south
我用南方来迁移我的django模型.然而,南方有一个令人讨厌的虫子.它没有在Postgres数据库中设置默认值.例:
created_at = models.DateTimeField(default = datetime.now)
tag_id = models.PositiveIntegerField(default = 0)
Run Code Online (Sandbox Code Playgroud)
South会将这两个字段添加到数据库中,但无法设置其默认值,这需要手动完成.
这个bug有没有补丁?
更新
我已经尝试过设置默认日期auto_now_add=True
,但这也没有设置默认值.添加null=True
字段会添加db.alter_column
由南方生成的迁移脚本.但是这只会删除NOT NULL
约束,不添加默认值.整数字段相同
gal*_*ant 22
如果您使用以下命令自动生成迁移:
./manage.py schemamigration app_name --auto
Run Code Online (Sandbox Code Playgroud)
然后,您需要在实际应用之前对迁移进行小的编辑.进入生成的迁移(应该称为类似app_name/migrations/000X__auto_add_field_foo.py)并查找参数:
keep_default=False
Run Code Online (Sandbox Code Playgroud)
在db.add_column调用中.只需将其更改为:
keep_default=True
Run Code Online (Sandbox Code Playgroud)
除了任何现有的行之外,Django现在将默认值应用于实际模式.如果南方有某种设置来默认生成此参数为True,那将会很棒,但没有这样的运气.您需要每次都进行此编辑.
Dan*_*man 12
这不是南方或其他地方的错误.
我认为你对Django默认值的工作原理感到困惑.Django不在数据库模式中设置默认值.它在创建新实例时直接在Python中应用它们.您可以通过执行此操作来验证这一点,manage.py sqlall
并查看生成的SQL不包含default
属性.
归档时间: |
|
查看次数: |
8245 次 |
最近记录: |