sql - 如何在 Django 中创建忽略 NULL 的唯一共同约束?

标签 sql django

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/

相关文章:

mysql - mysql中如何统计连续的重复行

python - 通用 FormView 中的 Django Formset

mysql - 计算和数据库设计以获得平均值

django - 多表继承的南迁移

python - 如何在 Django 中链接到我的 GCS Bucket JSON 凭证文件?

mysql - 有什么办法获取Mysql "rank"数据集

mysql - 如何将两个查询与 case 语句结合起来

mysql - 从单独行中的多个表中选择

mysql - 检查一对一关系 - SQL

python - 我遇到了来自 Django 的 404 错误消息。它说 "No location found matching the query"