2011-06-13 16 views
58

Bir nesneyi, bir çoktan çoğa ilişkisinden, gerçek nesneyi kaldırmadan nasıl silebilirim?Django nesnesi ManyToMany ilişkisinden kaldırılıyor

Örnek:

Ben modeller Moods ve Interest var.

'Mood' alanı çok fazla alana sahiptir interests (models.ManyToManyField(Interest)).

my_mood adlı Moods örneğini oluşturuyorum. my_moods ilgi alanları alanında ben

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

nasıl ya modeli örneği silmeden my_mood gelen my_interest kaldırırım anlamına my_interest var? Başka bir deyişle, ilgili modelleri etkilemeden ilişkiyi nasıl giderebilirim?

cevap

96
my_mood.interests.remove(my_interest) 

Django's Relations Docs

Not: Bu kodu çalıştırmak için önce my_mood ve my_interestDjango's QuerySet API kullanarak bir örneğini almak gerekebilir. Eğer altta yatan nesneleri dokunmadan tüm M2M başvuruları çıkarmak gerekirse

+0

ve bu onu çıkar modelinden kaldırmayacak mı? – Nayish

+1

@nayish Hayır, olmaz. Ama neden kendin denemesin? – DrTyrsa

+17

django docs'tan daha iyi –

7

, diğer yönden çalışmak kolay: Senin durumunda

interest.mood_set.clear() 
+0

Neden bu durum reddedildi? OP'nin sorusuna özel olarak değinmediğini, ancak cevabı bıraktığım için, M2M bağlamlarında ilişkilerin kaldırılmasıyla uğraşan insanlara özel ilgi gösterdiği ve örneklerle döngü yapma ihtiyacını ortadan kaldırdığı için cevabı bıraktım. Yardımcı bir ipucu olduğunu düşündüm. – shacker

+0

Seni hala seviyorum. Boynuzların seni yere indirmesine izin verme. –

+0

Bu sadece benim için yararlı oldu (ben döngü yapmak üzereydim ve istemiyordum). Gönderin için teşekkürler! – bwv549

0

sadece ilişkiyi

my_mood.interests.clear() 

temizleyebilirsiniz Sonra belki de tekrar serileştiricinizde yeni bir ilişki oluşturduğunuzda, bu gibi bir şeyleri yapabilirsiniz:

interests = Interests.objects.get_or_create(name='Something') 
my_mood_obj.tags.add(tag[0]) 
my_mood_obj.save() 
İlgili konular