Python Django ArrayField null=使用Postgresql进行的真正迁移
因此,在Django文档中,在Postgresql上创建新字段时,它说(): 。。。建议您始终使用Python Django ArrayField null=使用Postgresql进行的真正迁移,python,django,postgresql,Python,Django,Postgresql,因此,在Django文档中,在Postgresql上创建新字段时,它说(): 。。。建议您始终使用null=True创建新列,因为这样会立即添加这些列 如果我想创建一个ArrayField,比如: tags = ArrayField(models.CharField(max_length=255, blank=True, default=''), default=list, null=True) 我是否也应该将null=True传递到CharField中,该字段位于ArrayField中?我认
null=True
创建新列,因为这样会立即添加这些列
如果我想创建一个ArrayField,比如:
tags = ArrayField(models.CharField(max_length=255, blank=True, default=''), default=list, null=True)
我是否也应该将
null=True
传递到CharField
中,该字段位于ArrayField
中?我认为在内部类型上设置null=True
不会给您带来任何好处。您提到的文档中的注释仅适用于列本身,因此只要ArrayField
可为空,数据库就不必执行完整的表重写
如果您允许内部类型为null,那么您必须在代码中处理它,这可能不是您想要的。如果您添加null=True只是因为文档中说: 。。。建议您始终使用
null=True
创建新列,因为这样会立即添加这些列
我认为在数组字段中没有必要这样做。因为您已经在字段中添加了默认值。所以数据库中已经存在的任何条目都将具有此默认值(在本例中为空列表)
添加null=True
,以便在不指定默认值的情况下,可以将字段值设置为null,并且在迁移过程中不必手动输入默认值
将来,如果您不打算在此字段中输入空值,则可以省略null=True
部分
假设您有一个包含以下数据的表:
id | user_id
----+---------
1 | 66
2 | 105
3 | 110
4 | 174
添加default=list
并执行迁移后,您的数据将如下所示。注意,在这种情况下,不需要指定null=True
id | user_id | tag
----+---------+-----
1 | 66 | {}
2 | 105 | {}
3 | 110 | {}
4 | 174 | {}
如果不指定默认值并设置null=True
,则数据将为:
id | user_id | tag
----+---------+-----
1 | 66 |
2 | 105 |
3 | 110 |
4 | 174 |
从阅读中,我觉得您只需要将实际的ArrayField
设置为null,因为base\u字段仅用于类型、验证等。请注意,如果设置null=True
,您可能还需要设置blank=True
。否则,在清理模型表单时将出现错误。