【发布时间】:2023-03-28 18:54:01
【问题描述】:
我有一个具有不可为空 CharField 和 2 x 可空 CharField 的模型:
class MyModel(models.Model):
name = models.CharField('Name', max_length=255, null=False)
title = models.CharField('Title', max_length=255, blank=True)
position = models.CharField('Position', max_length=255, blank=True)
我想确保 name、title 和 position 一起是唯一的,所以使用 UniqueConstraint:
def Meta:
constraints = [
models.UniqueConstraint(
fields=['name', 'title', 'position'],
name="unique_name_title_position"
),
]
但是,如果 title 是 None,则此约束失败。
寻找原因,这是因为您可以将 NULL 值插入具有 UNIQUE 约束的列中,因为 NULL 是缺少值,因此它永远不会等于其他 NULL 值并且不考虑重复值。这意味着如果其中一个值为NULL,则可以插入看似重复的行。
在 Django 中严格执行这种唯一性的正确方法是什么?
【问题讨论】:
-
使可为空的列也不能为空?你想用这个解决什么问题?
-
你用的是什么数据库
-
@iklinac PostgreSQL 12
-
@yedpodtrzitko 这不符合我的用例。例如。如果
title和position为NULL,我只想要一个name。如果只有position为NULL,我想要一个name和title。
标签: django postgresql django-models