मैं django प्रबंधक (model.Manager) पर get_by_natural_key विधि को फिर से लिखने की कोशिश कर रहा हूं। मॉडल (NexchangeModel) जोड़ने के बाद मैं सभी() ऑब्जेक्ट्स को हटा सकता हूं लेकिन एकल - नहीं कर सकता।Django मॉडल को फिर से लिखने के बाद एकल ऑब्जेक्ट को हटा नहीं सकता है। प्रबंधक विधि
कर सकते हैं:
SmsToken.objects.all().delete()
नहीं कर सकते:
SmsTokent.objects.last().delete()
कोड:
from django.db import models
from core.common.models import SoftDeletableModel, TimeStampedModel, UniqueFieldMixin
class NexchangeManager(models.Manager):
def get_by_natural_key(self, param):
qs = self.get_queryset()
lookup = {qs.model.NATURAL_KEY: param}
return self.get(**lookup)
class NexchangeModel(models.Model):
class Meta:
abstract = True
objects = NexchangeManager()
class SmsToken(NexchangeModel, SoftDeletableModel, UniqueFieldMixin):
sms_token = models.CharField(
max_length=4, blank=True)
user = models.ForeignKey(User, related_name='sms_token')
send_count = models.IntegerField(default=0)
प्रयास करने पर क्या होता है? –
सभी पर() मुझे संदेश हटा रहा है .: i.e: (1, {'accounts.SmsToken': 1})। आखिरी() कुछ भी नहीं (कोई नहीं) लेकिन इसे एक समान संदेश भी देना चाहिए (रिकॉर्ड का पीके जो अभी हटा दिया गया था)। –
'सभी()' एक 'क्वेरीसेट', 'अंतिम()' एक उदाहरण देता है। इसलिए मैं अलग-अलग व्यवहार से आश्चर्यचकित नहीं होगा, क्योंकि पहला डिलीट-फ़ंक्शन प्रबंधक/क्वेरीसेट में से एक है और दूसरा आपके मॉडल में से एक है। बेशक यह समझा नहीं जाता है कि क्यों हटाना काम नहीं करता है ... – arie