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을 명시하지 않아도 자동으로 역참조 속성이 생성된다
신기방기 (근데 역참조 모델을 사용하지 않을꺼라면 메모리 낭비가 되지 않나??)
'Django > model' 카테고리의 다른 글
Django | ManyToMany는 사용하면 좋지않다 (0) | 2024.04.11 |
---|---|
[Django] 날짜 형식 체크 (0) | 2024.03.04 |