ManyToMany 관계에서 Django 제거 개체


112

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

예:

나는 모델 MoodsInterest.

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

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

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

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

답변:



65

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

interest.mood_set.clear()

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


10
왜 이것이 반대표를 받았습니까? 물론 OP의 질문을 구체적으로 다루지는 않지만 M2M 컨텍스트에서 관계를 제거하는 데 어려움을 겪는 사람들에게 특히 관심이 있고 인스턴스를 반복 할 필요가 없기 때문에 답변을 남겼습니다. 유용한 관련 팁이라고 생각했습니다.
shacker

2
이것은 나에게 유용했습니다 (내가 반복하려고했지만 원하지 않았습니다). 게시 해 주셔서 감사합니다!
bwv549

1
방금 위의 대답이 점을 추가하는 경우가 더 좋을 수
brainLoop

1
또는 관련 모델 이름을 가진interest.relatedname.clear()
조쉬

11

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

my_mood.interests.clear()

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

interests = Interests.objects.get_or_create(name='Something')
my_mood_obj.tags.add(tag[0])
my_mood_obj.save()
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.