एक और फ़ील्ड में अपनी अनूठी बाधा को परिभाषित करें:deleted
और आपके छद्म-अद्वितीय क्षेत्र। फिर, सॉफ्ट डिलीट का प्रतिनिधित्व करने के लिए, मॉडल की आईडी को deleted
. पर असाइन करें; हटाए गए आइटम के लिए, 0 असाइन करें।
इस दृष्टिकोण के साथ, हटाए गए आइटमों के लिए, deleted
. के बाद से फ़ील्ड लगातार-मूल्यवान है, बहु-फ़ील्ड अद्वितीय बाधा प्रभावी रूप से deleted
के मान को अनदेखा कर देगी और केवल छद्म-अद्वितीय क्षेत्रों के लिए विशिष्टता लागू करें; हटाए गए आइटम के लिए, deleted
ध्यान में रखा जाएगा, और चूंकि यह अद्वितीय है, इसलिए बाधा हमेशा संतुष्ट रहेगी - इसलिए समान छद्म-अद्वितीय फ़ील्ड के मान वाले मॉडल की कोई भी संख्या सह-अस्तित्व में हो सकती है।
उदाहरण के लिए, निम्न कोड वह हो सकता है जिसकी आप तलाश कर रहे हैं।
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')