Django UUIDFIeld unique=True、blank=True 和 null=True 的行为是不是正确?

Posted

技术标签:

【中文标题】Django UUIDFIeld unique=True、blank=True 和 null=True 的行为是不是正确?【英文标题】:Will Django UUIDFIeld unique=True, blank=True and null=True behave correctly?Django UUIDFIeld unique=True、blank=True 和 null=True 的行为是否正确? 【发布时间】:2020-05-29 19:42:34 【问题描述】:

我正在向数据库中添加一个字段:

identifier = models.UUIDField(unique=True, null=True, blank=True)

但我很好奇当有人在管理员中保存一个没有值的实例时,这是否会表现得像一个 CharField 或一个数字字段。它会尝试将值保存为空字符串"",还是会很聪明并将其保存为null?我正在为数据库使用 Postgres。我见过其他answers for CharField,但没有任何与 UUIDField 相关的内容。

我的最终目标是拥有一个保证唯一的字段,并且默认为null。写成这样更合适吗:

identifier = models.UUIDField(unique=True, null=True, default=None) 或者如果没有提供值,管理表单验证会抱怨吗?

【问题讨论】:

你为什么要做null=True 为什么允许null?因为这是一个现有的数据库,并且该字段的值将随着时间的推移而填充。几乎所有的实例都不会有这个字段的值。 【参考方案1】:

Django documentation 没有指定UUIDField 如何处理空值。

但是,查看source code 表明它不是CharField 的子集,并且它明确支持处理空值。

看来该字段确实会将None 值存储为NULL,并且由于此类值在 PostgreSQL 上始终是唯一的,因此您的方法应该适用于该数据库。

【讨论】:

以上是关于Django UUIDFIeld unique=True、blank=True 和 null=True 的行为是不是正确?的主要内容,如果未能解决你的问题,请参考以下文章

UUIDField在Django Model中的使用经验

管理员 search_fields 中的 Django UUIDField

##Django中Application labels aren't unique解决方法##

django : related_name and related_query_name

如何使用 UUID

连接功能不正确的 Django ~Q。漏洞?