Definer din unikke begrænsning på tværs af et felt mere:deleted og dine pseudo-unikke felter. Tildel derefter modellens id til deleted for at repræsentere en blød sletning; for fortrydede elementer, tildel 0.
Med denne tilgang, for gendannet elementer, da deleted feltet er konsekvent værdsat, vil den unikke begrænsning med flere felter effektivt ignorere værdien af den deleted og håndhæve unikhed for netop de pseudo-unikke felter; for slettede elementer, deleted vil blive taget i betragtning, og da det er unikt, vil begrænsningen altid være opfyldt - så et hvilket som helst antal modeller med de samme pseudo-unikke felters værdier kan eksistere side om side.
For eksempel kan følgende kode være det, du leder efter.
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')