我有这种布局的模型:
class SafeDeleteModel(models.Model):
.....
deleted = models.DateTimeField(editable=False, null=True)
......
class MyModel(SafeDeleteModel):
safedelete_policy = SOFT_DELETE
field1 = models.CharField(max_length=200)
field2 = models.CharField(max_length=200)
field3 = models.ForeignKey(MyModel3)
field4 = models.ForeignKey(MyModel4)
field5 = models.ForeignKey(MyModel5)
class Meta:
unique_together = [['field2', 'field3', 'field4', 'deleted'],]
这里的情景是我不希望用户删除数据,而是将记录隐藏起来。但是,我仍然希望所有未软删除的记录都遵守唯一键约束。基本上,我希望有尽可能多的重复删除记录,但只能存在一个唯一未删除记录。因此,我考虑添加“已删除”字段(由Django-safedelete库提供),但问题在于Django的唯一检查会因为['field2','field3','field4','deleted']这些属性中NULL不等于NULL,并返回"psycopg2.IntegrityError:违反唯一约束条件的重复关键字值" 。
是否有一种方法可以使用与我的Django模型布局相同的方式强制实施unique_together约束?或者直接物理删除记录,然后将其移动到归档数据库,并且如果用户想要恢复记录,软件将在归档中寻找记录并重新创建它?