Django मॉडल में रिकॉर्ड कैसे हटाएं?


267

मैं एक विशेष रिकॉर्ड हटाना चाहता हूं। जैसे कि

delete from table_name where id = 1;

मैं यह एक में कैसे कर सकते हैं django model?


16
सवाल पूछने के लिए धन्यवाद। कभी-कभी RTFM Google खोज और SO की तुलना में बहुत अधिक समय लेता है, जैसा कि उत्तर देने वाले वोटों की संख्या और विचारों की संख्या से
स्पष्ट है

8
@Freedom_Ben से सहमत हैं, लेकिन भविष्य के पाठकों के लिए, जैसे कि f * मैनुअल वैसे भी, यह वही है जो आप ढूंढ रहे हैं: docs.djangoproject.com/en/dev/topics/db/queries/…
Dinei

जवाबों:


512

कुछ तरीके हैं:

इसे सीधे हटाने के लिए:

SomeModel.objects.filter(id=id).delete()

इसे एक उदाहरण से हटाने के लिए:

instance = SomeModel.objects.get(id=id)
instance.delete()

50
ध्यान दें कि पहले वाला ऑब्जेक्ट के .delete () विधि को कॉल नहीं करेगा, इसलिए यदि आपके पास उस पद्धति में 'सफाई' कोड है, तो उसे कॉल नहीं किया जाएगा। आम तौर पर एक मुद्दा नहीं है, लेकिन ध्यान में रखने लायक है।
मैथ्यू Schinckel

8
@ मैथ्यू Schinckel: यह सच है। यदि आप कस्टम डिलीट विधि करना चाहते हैं तो आपको इसके बजाय pre_deleteया post_deleteसिग्नल का उपयोग करना चाहिए ।
वोल्फ

2
मुझे नहीं पता कि डीजेंगो 1.4 के बाद क्या मामला है, लेकिन यह वास्तव में सभी पीके को प्राप्त कर रहा है और फिर उन पीके द्वारा हटा दिया गया है। उदाहरण के लिए, यदि आप एक मनमाना क्षेत्र से हटाते हैं, तो यह धीमा हो सकता है तो SQL समकक्ष ... :(
Vajk Hermecz

1
@VajkHermecz: यह सच है और डिलीट सिग्नलों के कारण अपेक्षित व्यवहार है। Django सिग्नल सिस्टम को सभी डेटाबेस परिवर्तनों को ट्रैक करना पड़ता है क्योंकि कुछ इसे हुक कर सकता है (जैसे कि प्रत्यावर्तन करता है)।
वोल्फ

3
आप delete()जो हटा रहे थे , उसे चेक करने के लिए आप रिटर्न वैल्यू का उपयोग कर सकते हैं । यह हटाई गई वस्तुओं की गिनती के साथ एक टपल देता है और हटाए गए प्रकारों के बारे में विवरण के साथ एक शब्दकोश, जैसे (1, {'yourapp.SomeModel': 1})
mcb

37
MyModel.objects.get(pk=1).delete()

यदि निर्दिष्ट प्राथमिक कुंजी के साथ ऑब्जेक्ट मौजूद नहीं है, तो यह अपवाद को बढ़ाएगा क्योंकि पहले यह निर्दिष्ट ऑब्जेक्ट को पुनर्प्राप्त करने का प्रयास करता है।

MyModel.objects.filter(pk=1).delete()

यह अभ्यस्त अपवाद नहीं बढ़ाता है यदि निर्दिष्ट प्राथमिक कुंजी के साथ वस्तु मौजूद नहीं है और यह सीधे क्वेरी का उत्पादन करता है

DELETE FROM my_models where id=1

1
में टाइपो MyModel.object.filter(pk=1).delete()। यह "ऑब्जेक्ट" होना चाहिए।
निगेल

7

यदि आप एक आइटम को हटाना चाहते हैं

wishlist = Wishlist.objects.get(id = 20)
wishlist.delete()

यदि आप उदाहरण के लिए विशलिस्ट में सभी आइटम हटाना चाहते हैं

Wishlist.objects.all().delete()

7

यदि आप एक उदाहरण हटाना चाहते हैं तो कोड लिखें

delet= Account.objects.get(id= 5)
delet.delete()

यदि आप सभी उदाहरण हटाना चाहते हैं तो कोड लिखें

delet= Account.objects.all()
delete.delete()

6

वोल्फ ने एक अच्छा जवाब केंद्रित कोड प्रदान किया। लोगों के संदर्भ के लिए मुझे यहां केवल आधिकारिक डॉक पेस्ट करना है ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.