実際のオブジェクトを削除せずに、多対多の関係からオブジェクトを削除するにはどうすればよいですか?
例:
モデルはMoods
とInterest
です。
Mood
には、多対多のフィールドinterests
(models.ManyToManyField(Interest)
)があります。
my_mood
というMoods
のインスタンスを作成します。 my_moods
's interestsフィールドにはmy_interest
があります。
>>> my_mood.interests.all()
[my_interest, ...]
モデルインスタンスを削除せずにmy_interest
からmy_mood
を削除するにはどうすればよいですか?つまり、関連モデルに影響を与えずに関係を削除するにはどうすればよいですか?
my_mood.interests.remove(my_interest)
注:このコードを実行する前に、 DjangoのQuerySet API を使用してmy_mood
およびmy_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()