कई टैंगमोनी रिश्ते से वस्तु को हटाने वाला Django


112

मैं वास्तविक वस्तु को हटाए बिना कई-से-कई संबंधों से किसी ऑब्जेक्ट को कैसे हटाऊंगा?

उदाहरण:

मैं मॉडल Moodsऔर Interest

Moodकई-से-कई फ़ील्ड हैं interests(जो एक है models.ManyToManyField(Interest))।

मैं Moodsनामक एक उदाहरण बनाता हूं my_mood। में my_moodsके हितों क्षेत्र मैं my_interest, जिसका अर्थ है

>>> my_mood.interests.all()
[my_interest, ...]

मैं कैसे निकालूँ my_interestसे my_moodया तो मॉडल उदाहरण हटाए बिना? दूसरे शब्दों में, मैं संबंधित मॉडल को प्रभावित किए बिना संबंध कैसे हटाऊं?

जवाबों:


183
my_mood.interests.remove(my_interest)

Django के संबंध डॉक्स

नोट: इस कोड को निष्पादित करने से पहले आपको Django के QuerySet API का उपयोग my_moodऔर my_interestउपयोग करना पड़ सकता है।


3
AttributeError: 'RelatedManager' object has no attribute 'remove'
सेरिन

1
एक और जोड़ने के लिएentry my_mood.interests.add(my_interest)
Zohab अली

65

यदि आपको अंतर्निहित वस्तुओं को छूने के बिना सभी एम 2 एम संदर्भों को हटाने की आवश्यकता है, तो दूसरी दिशा से काम करना आसान है:

interest.mood_set.clear()

हालांकि यह सीधे ओपी के सवाल को संबोधित नहीं करता है, लेकिन यह इस स्थिति में अक्सर उपयोगी होता है।


10
इसे क्यों ठुकरा दिया गया? दी गई यह विशेष रूप से ओपी के सवाल को संबोधित नहीं करता है, लेकिन मैंने जवाब छोड़ दिया क्योंकि यह एम 2 एम संदर्भों में संबंधों को हटाने के साथ जूझ रहे लोगों के लिए विशिष्ट रुचि है, और उदाहरणों के माध्यम से लूप की आवश्यकता को हटाता है। मैंने सोचा कि यह एक सहायक संबंधित टिप था।
शकर

2
यह सिर्फ मेरे लिए उपयोगी था (मैं के माध्यम से पाश के बारे में था और नहीं करना चाहता था)। इसे पोस्ट करने के लिए धन्यवाद!
bwv549

1
यह बेहतर हो सकता है यदि आप इस बिंदु को उपरोक्त उत्तर में जोड़ते हैं
brainLoop

1
या मॉडलों में संबंधित नाम औरinterest.relatedname.clear()
जोश

11

आपके मामले में आप बस रिश्ता साफ कर सकते हैं

my_mood.interests.clear()

फिर शायद जब आप फिर से अपने धारावाहिक में नए संबंध बना रहे हों तो आप ऐसा कुछ कर सकते हैं

interests = Interests.objects.get_or_create(name='Something')
my_mood_obj.tags.add(tag[0])
my_mood_obj.save()
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.