sql - 如何在 Django 中创建一个忽略 NULL 的唯一约束?
问题描述
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
,只有两个字段上的唯一性。
推荐阅读
- corda - Corda 4 客户端 rpc LinearStateQueryCriteria 序列化问题
- php - Symfony UniqueEntity 验证问题
- java - 从 ArrayList 动态加载 recyclerview 中的图像
- javascript - 如何通过代码在原始(导入)html上绑定事件?
- angular - .zip() 与 Observable.zip() 有什么区别(rxjs ^5.5.6)
- c++ - 如何在 C++ GRPC 客户端中创建到一个特定地址的多个连接
- bootstrap-modal - Bootstrap vue 从模态主体中删除填充
- python - 如何访问我在系统属性下的环境变量中设置的变量值?
- python - 使用 python 将嵌套的 BigQuery 数据导出到云存储
- reporting-services - 详细信息:无法加载文件或程序集 'BarcodeLib,版本 = 1.0.0.19 或其依赖项之一