Django 从 ManyTomany 关系中删除对象

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

例如:

我有型号 MoodsInterest

Mood有一个多对多字段 interests(即 models.ManyToManyField(Interest))。

我创建了一个名为 my_moodMoods实例。在 my_moods的兴趣域中,我有 my_interest,意思是

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

如何从 my_mood删除 my_interest而不删除任何一个模型实例?换句话说,如何在不影响相关模型的情况下删除关系?

145353 次浏览
my_mood.interests.remove(my_interest)

姜戈的关系文件

注意: 在执行此代码之前,可能必须使用 Django 的 QuerySet API获得 my_moodmy_interest的实例。

如果您需要删除所有 M2M 引用而不触及底层对象,那么从另一个方向工作会更容易:

interest.mood_set.clear()

虽然这不能直接解决 OP 的问题,但是在这种情况下它通常很有用。

在你的情况下,你可以简单地清除这种关系

my_mood.interests.clear()

然后,也许当您再次在序列化程序中创建新的关系时,您可以执行类似的操作

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

model.field.remove(object_you_want_to_remove)
在这种情况下使用: my_mood.interests.remove(my_interest)