के लिए पद्धति को हटाना मैं Django के मॉडल छवि क्षेत्रों के लिए डिस्क में अनाथ फ़ाइलों को हटाने के क्रम में विधि को नष्ट अधिभावी कर रहा हूँ, व्यवस्थापक से ऑब्जेक्ट्स, लेकिन जब मैं एकाधिक ऑब्जेक्ट्स चुनता हूं और उन्हें हटा देता हूं, तो ऐसा नहीं लगता है। मैं थोड़ी देर के लिए गुगल रहा हूं लेकिन इसके लिए उत्तर पाने के लिए सही कीवर्ड नहीं मारा है, न ही आधिकारिक दस्तावेज इस विषय के बारे में बात करते हैं।अवहेलना Django के मॉडल कुछ इस तरह बड़ी संख्या में मिटाने
उत्तर
हटाने() विधि एक थोक हटाना करता है और अपने मॉडल पर किसी भी हटाने() पद्धतियों फोन नहीं करता है। हालांकि, यह सभी हटाए गए ऑब्जेक्ट्स (कैस्केड डिलीशन सहित) के लिए pre_delete और post_delete संकेतों को छोड़ देता है।
कि के लिए काम करने के लिए, आप QuerySet
पर हटाने की विधि ओवरराइड कर सकते हैं, और फिर लागू कि QuerySet
प्रबंधक के रूप में:
class ImageQuerySet(models.QuerySet):
def delete(self, *args, **kwargs):
for obj in self:
obj.img.delete()
super(ImageQuerySet, self).delete(*args, **kwargs)
class Image(models.Model):
objects = ImageQuerySet.as_manager()
img = models.ImageField(upload_to=get_image_path)
...
def delete(self, *args, **kwargs):
self.img.delete()
super(Image, self).delete(*args, **kwargs)
सीधे डेटाबेस पर क्वेरीसेट कार्यों की विधि हटाएं। यह Model.delete()
विधियों को कॉल नहीं करता है। docs से:
ध्यान रखें कि इस वसीयत, जब भी संभव हो, विशुद्ध रूप से एसक्यूएल में क्रियान्वित किया जा, और इसलिए हटाना() अलग-अलग वस्तु उदाहरणों के तरीकों जरूरी प्रक्रिया के दौरान कहा जा नहीं होंगे। यदि आपने मॉडल क्लास पर एक कस्टम डिलीट() विधि प्रदान की है और यह सुनिश्चित करना चाहते हैं कि इसे कहा जाता है, तो आपको उस मॉडल के उदाहरणों को मैन्युअल रूप से "मैन्युअल" हटाने की आवश्यकता होगी (उदाहरण के लिए, एक क्वेरीसेट पर पुनरावृत्ति करके और हटाएं() को कॉल करना प्रत्येक ऑब्जेक्ट व्यक्तिगत रूप से) QuerySet की थोक हटाएं() विधि का उपयोग करने के बजाय।
आप Django प्रशासन इंटरफ़ेस के डिफ़ॉल्ट व्यवहार को ओवरराइड करना चाहते हैं, आप एक कस्टम delete
कार्रवाई लिख सकते हैं:
https://docs.djangoproject.com/en/1.7/ref/contrib/admin/actions/
एक अन्य विधि delete
विधि के बजाय post_delete
(या pre_delete
) ओवरराइड करने के लिए संकेत है:
https://docs.djangoproject.com/en/1.7/ref/signals/#django.db.models.signals.post_delete
pre_delete की तरह, लेकिन मॉडल के डिलीट() विधि और एक क्वेरीसेट की हटाएं() विधि के अंत में भेजा गया।
समाधान के लिए धन्यवाद। मैं उन्हें एक कोशिश दूंगा लेकिन मैं ग्वाइनब्लिड के जवाब को स्वीकार्य कारण के रूप में चिह्नित कर रहा हूं क्योंकि मैं उसका अपमान (क्लीनर लगता है) का समर्थन करता हूं। –
- 1. कुछ इस तरह स्मृति
- 2. अवहेलना Django InlineModelAdmin
- 3. Django मॉडल संख्या फ़ील्ड
- 4. कैसे मैं इस तरह एक मॉडल है Django
- 5. बड़ी संख्या में फाइलों के लिए Django फाइल सिस्टम स्टोरेज
- 6. बड़ी संख्या में मैट्रिक्स
- 7. बड़ी संख्या में डेटा
- 8. बड़ी संख्या में
- 9. बड़ी संख्या में संख्याओं से बड़ी संख्या कैसे प्राप्त करें?
- 10. बड़ी संख्या में नोड्स
- 11. क्या बड़ी संख्या में
- 12. बड़ी संख्या में structs
- 13. अवहेलना रेल नियंत्रक मॉडल का नाम
- 14. अजवाइन काम अनुसूची कुछ इस तरह
- 15. अवहेलना डिफ़ॉल्ट क्वेरीसमूह
- 16. बड़ी संख्या में जूमला साइट्स
- 17. एक बड़ी django तालिका
- 18. बड़ी संख्या में मॉड्यूलस पावर
- 19. अवहेलना विधि
- 20. read.csv बड़ी संख्या में कॉलम
- 21. मिटाने और
- 22. बड़ी संख्या में कॉलम के लिए डेटाबेस स्कीमा डिज़ाइन
- 23. पास्कल (डेल्फी) में बड़ी संख्या
- 24. अवहेलना विधि
- 25. BigDecimal.movePointRight() बहुत बड़ी संख्या
- 26. एचटीएमएल में कुछ पाठ कैसे दिखाना है। लेबल? इस तरह
- 27. सी: मुद्रण बड़ी संख्या
- 28. Django मॉडल
- 29. Django मॉडल
- 30. जावास्क्रिप्ट बड़ी संख्या पुस्तकालय?
मुझे लगता है कि मैंने इसे प्रलेखन में पढ़ा लेकिन पता नहीं था कि यह व्यवस्थापक के थोक हटाए गए पर लागू होता है। वैसे भी, मुझे आपका समाधान पसंद आया, बहुत बहुत धन्यवाद! –