Django如何利用其唯一索引来处理NULL?有没有办法允许许多 NULL 行,同时强制非空值的唯一性?
然后,对 unique_together 提出同样的问题。有没有办法强制执行 unique_together,但如果任何字段为 NULL,则允许该行?
最佳答案
我不确定 MySQL,但 SQLite 和 PostgreSQL 不认为 NULL
值相等,因此您正在寻找的行为实际上是默认行为。
您可以自行验证:
class MyModel(models.Model):
title = models.CharField(unique=True, null=True, max_length=255)
>>> MyModel.objects.create()
<MyModel: MyModel object (1)>
>>> MyModel.objects.create()
<MyModel: MyModel object (2)>
对于unique_together
:
class MyModel(models.Model):
title = models.CharField(null=True, max_length=255)
description = models.CharField(null=True, max_length=255)
class Meta:
unique_together = (('title', 'description'),)
>>> MyModel.objects.create(title='x')
<MyModel: MyModel object (1)>
>>> MyModel.objects.create(title='x')
<MyModel: MyModel object (2)>
请注意,在第二个示例中,title
字段没有唯一约束,只有两个字段上的唯一约束。
关于sql - 如何在 Django 中创建忽略 NULL 的唯一共同约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50951759/