Django从ManyToMany关系中删除对象

时间:2011-06-13 16:09:34

标签: django many-to-many

如何在不删除实际对象的情况下从多对多关系中删除对象?

示例:

我有模型MoodsInterest

Mood有多对多字段interestsmodels.ManyToManyField(Interest))。

我创建了一个名为Moods的{​​{1}}实例。在my_mood的兴趣领域,我有my_moods,意思是

my_interest

如何在不删除任何模型实例的情况下从>>> my_mood.interests.all() [my_interest, ...] 删除my_interest?换句话说,如何在不影响相关模型的情况下删除关系?

4 个答案:

答案 0 :(得分:140)

my_mood.interests.remove(my_interest)

Django's Relations Docs

注意:在执行此代码之前,您可能必须使用Django's QuerySet API获取my_moodmy_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)