Django不能插入重复的键值NULL

2024-04-20 01:40:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要在enc_id中允许NULL,但是如果值不是NULL,我需要这些值是唯一的。这是我的模型:

class Intake(models.Model):
    id = models.AutoField(primary_key=True)
    enc_id = models.IntegerField(blank=True, null=True, unique=True)
    enc_date = models.DateField(null=True)
    enrollment = models.ForeignKey('Enrollment')

尝试添加另一个没有enc_id的实例时出错:

^{pr2}$

根据我所读到的(包括this和一些已解决的Django问题),拥有blank=True, null=True, unique=True应该允许我有重复的null,但不能执行。我重新创建了我的数据库以防万一,它仍然会引发完整性错误。在

我运行的是django1.10和mssqlserver10。有什么想法吗?在


Tags: key模型idtruemodelmodelsnullclass
2条回答

罗西

对于我来说,有一个唯一的字段,在这个字段中可以有重复的null,这对我来说没有多大意义。你能不能去掉限制,用其他方法来强化这个规则呢?在

例如,您可以重写save方法来执行此操作。。在

def save(self, *args, **kwargs):
    # place your logic here

我希望这是有意义的,但是在DB级别的规则,比如您定义的规则是非常有限的。。在

对于将来遇到这种情况的人来说,这是MS SQL Server的一个限制。ANSI标准要求唯一索引不包含重复值—SQL Server(而不是其他数据库)认为NULL等于NULL—许多其他数据库(例如Postgres)和ANSI标准从92年起将NULL视为不可知值,这与SQL SELECT中考虑的另一个不可知值不同,其中的\uuuu是空值与=空值的比较。SQL Server有一个ANSI\u NULLS标志,它实际上强制在查询中使用符合标准的IS(NOT)NULL而不是xyz=/<;>NULL,但这在索引中没有相同的效果。在

更多非Django特定信息:https://www.sqlservergeeks.com/sql-server-unique-constraint-multiple-null-values/

相关问题 更多 >