django Model 에서 ForeignKey 를 사용했을 때
역방향으로 접근하는 방법
예를 들어
쇼핑몰에서 물건을 판매중인 seller의 마이페이지를 구성한다고 해보자
Product 모델에서 User 모델을 참조하여 seller 필드를 정의한 상황
특정 seller 가 가진 Product 를 전부 가져와야한다.
아래 처럼 ORM으로 filter 를 사용해서 조회할 수도 있다.
Product.objects.filter(seller__username='Mark')
그런데 Transaction 모델에서도 특정 seller 가 가지는 주문 건을 모두 보려고 한다면 ? Product, Transaction, Review, .. 또는 다른 모델에서 전부 필터를 해서 데이터를 가져와서 context로 만들어야하는데 이것은 매우 비효율적
이럴 경우 reverse accessor 를 사용하면 더 효율적으로 구성할 수 있다.
사용은 간단한데, [Model]_set 을 사용해주면 된다.
# seller 객체를 만든 후
seller1 = User.objects.get(pk=1)
# 그 객체가 참조된 모델의 리스트
seller1.product_set.all()
seller1.transaction_set.all()
product_set 을 대체하는 방법으로 Model 에 related_name 을 parameter 로 넣어줄 수 있다.
# Product Model
seller = models.ForeignKey(
"User",
on_delete=models.CASCADE,
related_name = "products",
)
related_name 을 쓰면 더 직관적으로 구문을 작성할 수 있다.
# seller 객체를 만든 후
seller1 = User.objects.get(pk=1)
# products_set -> product 대체
seller1.products.all()
'개발하면서적는글' 카테고리의 다른 글
git commit 주요 명령어 (0) | 2024.08.21 |
---|---|
경영정보시각화능력 필기 수험 가이드북 (0) | 2024.05.16 |
[통계]부동산 분석을 위한 데이터 원천 (1) | 2024.01.04 |
[통계] 검정력(power) (0) | 2023.02.06 |
[django/python] Serializer 필요한 이유 (0) | 2022.10.15 |
댓글