Django/model

[Django] related_name 자동 참조

두잇 두두 2024. 3. 18. 21:46
728x90

배경

사내 코드 중에 명시하지 않았는데 obj를 참조하고 있는 가진 모델을 다루는 코드가 있었다.

이제껏 prefetch로 가져오고 명시해줘서 뭔가 어색했었다.

그런데 쿼리를 가져올 시 prefetch를 사용하지 않으면 모델_set으로 가져오는 방식이 있었다.

그래서 문득 django가 자동으로 관련 테이블을 가져와주는 것인가? 라는 생각에 정리를 하게 되었다.

 

 

코드

#comments가 다른 모델의 copmment_obj에 related_name로 설정 되어있음
comment_obj.comments.create(
            content=content,
            user=request.user
        )

 

 

설명

일반적으로 ForeignKey나 OneToOneField와 같은 관계형 필드를 사용하면, Django는 자동으로 해당 모델과의 관련된 역참조 속성을 생성합니다. 이 속성은 원래 모델의 이름을 소문자화하고 "_set"을 접미사로 붙인 이름으로 설정됩니다.

예를 들어, "comment"라는 ForeignKey 필드가 있는 모델을 가정하면, Django는 자동으로 "comment_set"이라는 역참조 속성을 생성합니다. 이를 통해 해당 모델과 관련된 객체를 가져올 수 있습니다!

 

 

배운 점

Django에서 related_name을 명시하지 않아도 자동으로 역참조 속성이 생성된다

신기방기 (근데 역참조 모델을 사용하지 않을꺼라면 메모리 낭비가 되지 않나??)