关于python:Django无法插入重复的键值NULL

Django cannot insert duplicate key value NULL

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

1
2
3
4
5
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的情况下添加另一个实例时出错:

1
django.db.utils.IntegrityError: ('23000',"[23000] [FreeTDS][SQL Server]Violation of UNIQUE KEY constraint 'UQ__caseload__E136D21F4222D4EF'. Cannot insert duplicate key in object 'dbo.caseload_intake'. The duplicate key value is (<NULL>). (2627) (SQLExecDirectW)")

根据我读到的内容(包括这一点和一些解决了的django问题),拥有EDOCX1[2]应该允许我有重复的空值,但不能执行。为了以防万一,我重新创建了数据库,但它仍然会引发完整性错误。

我运行的是Django1.10和MS SQL Server 10。有什么想法吗?


罗茜

对于我来说,有一个唯一的字段,其中可以有重复的空值,这没有多大意义。你能消除约束并用其他方法强化这条规则吗?

例如,您可以重写方法save以便执行该操作。

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

我希望这是有道理的,但是在数据库级别上的规则(如您定义的规则)是非常有限的。