Django में कई ऑब्जेक्ट हटाएं


105

मुझे वेबपेज का उपयोग करके अपने डेटाबेस से हटाए जाने वाली कई वस्तुओं का चयन करने की आवश्यकता है। चयन करने के लिए कोई श्रेणी नहीं है इसलिए मैं उन सभी को इस तरह से हटा नहीं सकता। क्या मुझे अपना स्वयं का डिलीट फॉर्म लागू करना होगा और इसे django में प्रोसेस करना होगा या क्या django के पास पहले से ही ऐसा करने का कोई तरीका है? जैसा कि इसके व्यवस्थापक इंटरफ़ेस में लागू किया गया है।

जवाबों:


201

आप चाहें तो किसी भी क्वेरी को हटा सकते हैं। उदाहरण के लिए, कुछ पोस्ट मॉडल वाले सभी ब्लॉग पोस्ट को हटाने के लिए

Post.objects.all().delete()

और भविष्य की प्रकाशन तिथि के साथ किसी भी पोस्ट को हटाने के लिए

Post.objects.filter(pub_date__gt=datetime.now()).delete()

हालाँकि, आपको अपने क्वेरीसेट को कम करने के तरीके के साथ आने की आवश्यकता है। यदि आप किसी विशेष ऑब्जेक्ट को हटाने के लिए केवल एक दृश्य चाहते हैं, तो हटाएं जेनेरिक दृश्य देखें

संपादित करें:

गलतफहमी के लिए खेद है। मुझे लगता है कि इसका जवाब कहीं न कहीं है। अपने स्वयं के कार्यान्वयन के लिए, ModelFormएस और जेनेरिक विचारों को मिलाएं । अन्यथा, 3 पार्टी ऐप देखें जो समान कार्यक्षमता प्रदान करते हैं। एक में संबंधित सवाल , सिफारिश था Django फिल्टर


1
नहीं, आपने प्रश्न को गलत समझा है। मैं समझता हूं कि मैं सब कुछ हटा सकता हूं। लेकिन मुझे वेबपृष्ठ पर फ़ॉर्म के साथ हटाने के लिए ऑब्जेक्ट का चयन करने की आवश्यकता है। और फिर फॉर्म से लौटे डेटा को मेरे विचार-पत्र में संसाधित करें। फिर डेटा के माध्यम से इसके लूपिंग के रूप में हटाए गए फ़ॉर्म के माध्यम से लूप। लेकिन मैं यह जानना चाहता था कि इसे django में लागू करने के लिए सबसे अच्छा अभ्यास क्या है।
डीन

आह, मेरी गलती! मैं या तो तीसरे पक्ष के ऐप का उपयोग करूंगा, या सामान्य विचारों के साथ ModelForm
मैट लूंगो

7
@ डीन, उस डिलीट व्यू पर एक नज़र डालें। या आप बस अपना खुद का दृश्य लिख सकते हैं ... मेरा मतलब है कि आप अंततः पीके की एक सूची प्राप्त कर रहे हैं और अपने मॉडल पर कॉल हटाएं ... MyModel.objects.filter(id__in=request.POST.getlist('delete_list')).delete()और मुझे यकीन है कि आप कुछ सुनिश्चित करना चाहते हैं कि एक यादृच्छिक व्यक्ति सभी को हटा नहीं सकता है पीके अनुमान लगाकर अपने डीबी में वस्तुओं।
युजी 'तोमिता' तोमिता

1
@ डीन, इसके बारे में अधिक समझ के बिना आपके प्रश्न का उत्तर देना कठिन है। आपको बस एक फ़ॉर्म बनाने की ज़रूरत है जो उपयोगकर्ता को सही डिलीट मानदंड (जो कुछ भी हो सकता है - शायद एक इनपुट बॉक्स जहां एक आईडी नंबर टाइप करता है ... लेकिन शायद अधिक जटिल है) का चयन करने की अनुमति देता है, एक ऐसा दृश्य बनाएं जो उस पर प्रतिक्रिया करता हो फ़ॉर्म, शायद सत्यापन (अनुमतियाँ) करता है, और फिर अंततः वह filter(foo).delete()विधि चलाता है ।
युजी 'तोमिता' तोमिता

1
इसका एक कारण यह नहीं है कि रूपरेखा के साथ संपादन / विलोपन के लिए प्राधिकरण और @YujiTomita द्वारा उल्लिखित अन्य जटिलताओं का प्रश्न है। यदि आपको वास्तव में जटिल फ़िल्टरिंग की आवश्यकता है, तो django-filtering की जांच करें और एक डिलीट बटन जोड़ें, जो उपयोगकर्ता अधिकृत होने पर QuerySet.delete () कॉल करता है।
मैट लुओंगो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.