如何在不删除实际对象的情况下从多对多关系中删除对象?
示例:
我有模型Moods
和Interest
。
Mood
有多对多字段interests
(models.ManyToManyField(Interest)
)。
我创建了一个名为Moods
的{{1}}实例。在my_mood
的兴趣领域,我有my_moods
,意思是
my_interest
如何在不删除任何模型实例的情况下从>>> my_mood.interests.all()
[my_interest, ...]
删除my_interest
?换句话说,如何在不影响相关模型的情况下删除关系?
答案 0 :(得分:140)
my_mood.interests.remove(my_interest)
注意:在执行此代码之前,您可能必须使用Django's QuerySet API获取my_mood
和my_interest
的实例。
答案 1 :(得分:31)
如果您需要删除所有M2M引用而不触及底层对象,则从另一个方向开始工作会更容易:
interest.mood_set.clear()
虽然这并没有直接解决OP的问题,但在这种情况下它通常很有用。
答案 2 :(得分:7)
在您的情况下,您可以简单地清除关系
my_mood.interests.clear()
然后,当您再次在序列化程序中创建新关系时,您可以执行类似这样的操作
interests = Interests.objects.get_or_create(name='Something')
my_mood_obj.tags.add(tag[0])
my_mood_obj.save()
答案 3 :(得分:0)
model.field.remove(object_you_want_to_remove)
在这种情况下使用:my_mood.interests.remove(my_interest)