목록 보기
[장고 ORM] 역방향 참조 외래 키 찾기
백엔드

[장고 ORM] 역방향 참조 외래 키 찾기

8퍼센트
8퍼센트
2020년 11월 29일

두줄요약

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와 수정 방식이 달라 별도 처리 필요
  • 역방향 참조 수정 전 다른 앱에 정의된 참조 모델 포함 여부 확인 필요

다음 읽기

#Django 주제를 다룬 다른 회사 글

Django ORM only 기능

Django ORM의 `only()`로 필요한 컬럼만 조회하고 저장 쿼리를 줄이는 방식을 살펴봤습니다.\n미조회 필드 접근 시 lazy loading 추가 쿼리가 발생하므로 필드 선택에 주의해야 합니다.

똑똑한개발자
똑똑한개발자
백엔드

댓글 0개

댓글을 작성하려면 로그인이 필요합니다.

댓글을 불러오는 중...