Mysql Django唯一约束无法正常工作

Mysql Django唯一约束无法正常工作,mysql,django,django-models,Mysql,Django,Django Models,我有一个带有自定义_id的模型,它必须是唯一的,而软删除、删除的对象不必具有唯一的_id,因此我按如下方式执行: 类MyModelmodels。模型: _id=models.CharFieldmax\u length=255,db\u index=True event_code=models.CharFieldmax_length=1,blank=True,default='I' 已删除=模型。BooleanFielddefault=False 已删除\u id=models.IntegerFi

我有一个带有自定义_id的模型,它必须是唯一的,而软删除、删除的对象不必具有唯一的_id,因此我按如下方式执行:

类MyModelmodels。模型: _id=models.CharFieldmax\u length=255,db\u index=True event_code=models.CharFieldmax_length=1,blank=True,default='I' 已删除=模型。BooleanFielddefault=False 已删除\u id=models.IntegerFieldblank=True,null=True objects=MyModelManager,用于过滤已删除的对象 all_objects=MyModelBaseManager,返回每个对象,包括已删除的对象 类元: 约束=[ UniqueConstraintfields=[''事件id','事件代码','已删除','已删除id'],名称='唯一id' ] def deleteself,*args,**kwargs: self.deleted=True self.deleted\u id=self.max\u related\u deleted\u id+1 自救 def undeleteself、*args、**kwargs: self.deleted=False self.deleted_id=None 自救 def max_related_deleted_idself: 获取具有相同\u id的已删除对象的最大已删除\u id max\u deleted\u id=MyModel.all\u objects.filterQ\u id=self.\u id&~Qpk=self.pk&Qdeleted=True.aggregateMax'deleted\u id'['deleted\u id\u max'] 如果max_deleted_id不是其他0,则返回max_deleted_id 删除的_id的整个逻辑都在工作,我测试了它,问题是UniqueConstraint不工作,例如:

$MyModel.objects.create_id='A',event_code='A' $MyModel.objects.create_id='A',event_code='A' $MyModel.objects.create_id='A',event_code='A' $MyModel.objects.filter_id='A'。值'pk','u id','event_code','deleted','deleted_id' [{u id':'A', “已删除”:False, “已删除id”:无, “事件代码”:“A”, “pk”:1}, {u id':'A', “已删除”:False, “已删除id”:无, “事件代码”:“A”, 'pk':2}, {u id':'A', “已删除”:False, “已删除id”:无, “事件代码”:“A”, “pk”:3}] 以下是创建唯一约束的迁移:

$python manage.py sqlmigrate myapp 0003 开始 - -在模型MyModel上创建约束唯一\u id - ALTER表'myapp\u mymodel'添加约束'unique\u id'unique`\u id`、'event\u code`、'deleted`、'deleted\u id`; 犯罪 感谢您的帮助

Django版本=2.2

Python版本=3.7


Database=MySQL 5.7

好的,我解决了我的问题,我将在这里发布这篇文章,以防有人碰到它:

问题在于MySQL,如中所述,MySQL允许在唯一约束中使用多个空值,因此我必须将deleted_id的默认值更改为0,现在它可以工作了