Django ManyToMany ilişkisinden nesneyi kaldırıyor


112

Gerçek nesneyi kaldırmadan bir nesneyi Çoktan Çoğa ilişkisinden nasıl silebilirim?

Misal:

Modellerim var Moodsve Interest.

Moodçoktan çoğa alanı vardır interests(bu birmodels.ManyToManyField(Interest) ).

MoodsÇağrılan bir örnek oluşturuyorum my_mood. In my_moodsbireyin çıkarları alanına Ben my_interest, anlam

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

Nasıl kaldırırım my_interestgelen my_moodiki modeli örneği silmeden? Diğer bir deyişle, ilgili modelleri etkilemeden ilişkiyi nasıl kaldırırım?

Yanıtlar:



65

Tüm M2M referanslarını alttaki nesnelere dokunmadan kaldırmanız gerekirse, diğer yönden çalışmak daha kolaydır:

interest.mood_set.clear()

Bu, doğrudan OP'nin sorusuna hitap etmese de, bu durumda genellikle yararlıdır.


10
Bu neden reddedildi? Özel olarak OP'nin sorusunu ele almadığını kabul ettim, ancak cevabı bıraktım çünkü M2M bağlamlarında ilişkileri kaldırmakla boğuşan insanları özel olarak ilgilendiriyor ve örnekler arasında döngü yapma ihtiyacını ortadan kaldırıyor. Bunun yararlı bir ipucu olduğunu düşündüm.
shacker

2
Bu sadece benim için faydalı oldu (döngü yapmak üzereydim ve istemiyordum). Gönderdiğiniz için teşekkürler!
bwv549

1
Bu noktayı yukarıdaki cevaba eklemeniz daha iyi olabilir
brainLoop

1
Veya modellerde ilgili adla veinterest.relatedname.clear()
Josh

11

Senin durumunda ilişkiyi basitçe temizleyebilirsin

my_mood.interests.clear()

O zaman belki serileştiricinizde tekrar yeni bir ilişki yaratırken, bunun gibi bir şey yapabilirsiniz.

interests = Interests.objects.get_or_create(name='Something')
my_mood_obj.tags.add(tag[0])
my_mood_obj.save()
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.