Django如何使用其唯一索引处理NULL?有没有办法在非空值上强制唯一性的同时允许许多NULL行?
然后,对unique_together也有同样的问题。有没有一种方法可以强制执行unique_together,但是如果任何字段为NULL,则允许该行?
答案 0 :(得分:2)
我不确定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
字段上没有唯一性约束,两个字段中唯一性在一起。