2011-08-29 18 views
30

एक मॉडल में, मैं इस है:कई लोगों से सभी रिश्तों को कैसे हटाया जाए?

class MyModel(models.Model): 
    relations = models.ManyToManyField(OtherModel) 
    .... 

और अगर मैं चुनें:

my_object.relations.remove(other_model_object) 

यह काम करता है।

संबंधों से सभी वस्तुओं को कैसे हटाया जाए? my_object.relations.clean() काम नहीं कर रहा है।

+4

.remove() और .clear() रिश्तों निकल जाएगी, लेकिन वे वास्तव में संबंधित वस्तुओं को नहीं हटाएंगे ... क्या आप ऐसा करने की कोशिश कर रहे हैं? – Brandon

+0

हां, बहुत धन्यवाद। – Nips

+0

यहां देखें http://stackoverflow.com/questions/4719137/how-do-i-remove-multiple-objects-in-a-manytomany-relationship-based-on-a-filter – madjardi

उत्तर

33

सबसे पहले, आपको .clear() या .remove() का उपयोग कर रिलेशनशिप को साफ़ करने की आवश्यकता होगी, जो भी आपकी आवश्यकताओं को बेहतर बनाता है according to the docs

उसके बाद, आपको [YourModel] का उपयोग करके ऑब्जेक्ट को हटाना होगा। delete() विधि।

23

यदि आपको केवल 2 मॉडल के बीच सभी उदाहरणों के लिए संबंध हटाने की आवश्यकता है तो आप रिलेशनशिप टेबल के प्रबंधक तक पहुंच कर ऐसा कर सकते हैं। M2M संबंध तालिका ताकि रिश्तों को हटाने यह आसान हो जाता है के लिए MyModel.relations.through के माध्यम से पहुँचा जा सकता है:

MyModel.relations.through.objects.all().delete() 

संदर्भ:

https://docs.djangoproject.com/en/dev/ref/models/fields/#django.db.models.ManyToManyField.through

+25

इस इच्छा से सावधान रहें एम 2 एम टेबल में सभी पंक्तियों को हटाएं क्योंकि .objects को MyModel से m2m decouple करें। तो आपको 'Author.books.through.objects.filter (author_id = author.pk) जैसे कुछ करने की आवश्यकता है .delete()' – Christoffer

+0

यह वही था जो मैं ढूंढ रहा था। उपयोगी, लेकिन सही जवाब नहीं। – benzkji

+0

चेतावनी! यह वास्तव में खतरनाक कार्य है क्योंकि यह संपूर्ण रिश्ते की मेज को हटा देगा! –

संबंधित मुद्दे