[장고 ORM] 역방향 참조 외래 키 찾기
두줄요약
Django ORM의 `_meta.related_objects`로 특정 모델을 참조하는 역방향 외래 키를 찾는 방법을 설명했습니다. 중복 데이터를 병합할 때 모든 참조를 갱신한 뒤 삭제하는 흐름을 제시했습니다.
문제 상황
- 중복 등록된 Product를 병합할 때 참조 중인 Purchase·Sell 등 데이터의 외래 키 이전 필요
- 같은 앱 밖의 모델까지 포함한 모든 역방향 참조 누락 위험
구조와 흐름
- 순방향 참조는 대상 모델의 ForeignKey 필드 일괄 수정
- 역방향 참조는
Product._meta.related_objects에서 관계 객체 순회 related_model,remote_field.name,get_accessor_name()으로 참조 모델·필드·역참조 이름 확인
해결 방법
ManyToOneRel관계만 선별해 각 참조 모델의product_2를product_1으로 일괄 갱신- 모든 참조 이전 후 중복 Product 삭제
주의할 점
OneToOneRel,ManyToManyRel은 ForeignKey와 수정 방식이 달라 별도 처리 필요- 역방향 참조 수정 전 다른 앱에 정의된 참조 모델 포함 여부 확인 필요


