Xác định ràng buộc duy nhất của bạn trên một trường khác:deleted
và các trường giả độc đáo của bạn. Sau đó, để đại diện cho phép xóa mềm, hãy chỉ định id của mô hình cho deleted
; đối với các mục chưa xóa, chỉ định 0.
Với cách tiếp cận này, đối với các mục chưa xóa, vì deleted
trường được định giá nhất quán, ràng buộc duy nhất của nhiều trường sẽ bỏ qua giá trị của deleted
một cách hiệu quả và thực thi tính duy nhất cho các trường giả duy nhất; đối với các mục đã xóa, deleted
sẽ được tính đến và vì nó là duy nhất, ràng buộc sẽ luôn được thỏa mãn - vì vậy bất kỳ số lượng mô hình nào có cùng giá trị của các trường giả duy nhất đều có thể cùng tồn tại.
Ví dụ:mã sau có thể là những gì bạn đang tìm kiếm.
class Deletable(models.Model):
deleted = models.IntegerField(default=0)
class Meta:
abstract=True
def soft_delete(self):
self.deleted=self.id
self.save()
class ConcreteModel(Deletable):
a = models.IntegerField()
b = models.IntegerField()
class Meta:
unique_together=('a', 'b', 'deleted')