【发布时间】:2020-01-27 07:07:49
【问题描述】:
我有这种布局的模型:
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 的唯一检查因“psycopg2.IntegrityError:重复键值违反唯一约束”而失败 ['field2', 'field3' , 'field4', 'deleted'] 因为 NULL 不“等于” NULL 并且它在 PostgreSQL 中产生 false。
有没有办法以我的 Django 模型布局强制执行 unique_together 约束?或者有没有更好的办法是物理删除记录,然后将其移动到存档数据库中,如果用户想要恢复记录,那么软件会在存档中查找记录并重新创建它?
【问题讨论】:
标签: django database postgresql django-models soft-delete