【问题标题】:How to create a unique-together constraint in Django that ignores NULL?如何在 Django 中创建一个忽略 NULL 的唯一约束?
【发布时间】:2018-11-29 19:06:19
【问题描述】:

Django 如何处理带有唯一索引的 NULL?有没有办法允许许多 NULL 行,同时对非空值强制唯一性?

然后,针对 unique_together 的相同问题。有没有办法强制执行 unique_together,但如果任何字段为 NULL,是否允许该行?

【问题讨论】:

标签: sql django


【解决方案1】:

我不确定 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 字段没有唯一性约束,只有两个字段上的唯一性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-12
    • 2010-10-17
    相关资源
    最近更新 更多