[django] ManyToMany 관계에서 Django 제거 개체

실제 개체를 제거하지 않고 다 대다 관계에서 개체를 삭제하려면 어떻게해야합니까?

예:

나는 모델 MoodsInterest.

Mood다 대다 필드 interests( models.ManyToManyField(Interest))가 있습니다.

Moods라는 인스턴스를 만듭니다 my_mood. 에서 my_moods의 관심 분야 나 가지고 my_interest, 의미를

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

모델 인스턴스를 삭제하지 않고 my_interest에서 제거하려면 어떻게합니까 my_mood? 즉, 관련 모델에 영향을주지 않고 관계를 제거하려면 어떻게해야합니까?



답변

my_mood.interests.remove(my_interest)

장고의 관계 문서

참고 : 인스턴스를 얻을해야 할 수도 있습니다 my_moodmy_interest사용 장고의 검색어 세트의 API 것은 이 코드를 실행하기 전에.


답변

기본 개체를 건드리지 않고 모든 M2M 참조를 제거해야하는 경우 다른 방향에서 작업하는 것이 더 쉽습니다.

interest.mood_set.clear()

이것은 OP의 질문을 직접적으로 다루지는 않지만 종종이 상황에서 유용합니다.


답변

귀하의 경우 단순히 관계를 지울 수 있습니다

my_mood.interests.clear()

그런 다음 serializer에서 새 관계를 다시 만들 때 다음과 같이 할 수 있습니다.

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


답변