장바구니 담기 뷰 강의에서 질문이 있습니다.
장바구니 담기 뷰를 듣기 전까지
ProductListView에서 쿼리셋을 호출하는 변수는 아래와 같이 작성하고 있었습니다. -> 계속 이 쿼리를 참조하고 있다고 생각했습니다.
product_qs = Product.objects.all().select_related(
"category"
)product_list.html에서는 해당 쿼리를{% for product in product_list %}으로 불러오고 있는데 여기서 쿼리셋의 이름이 되는product_list가 어떻게 저 이름을 가지게 되는건지 앞 강의에서 설명해 주신것 같은데 맞을까요? 다시 들으려고 했는데 강의가 많아 혹시 어떤 회차인지 알려주시면 감사하겠습니다 ..ㅠ.ㅠ(뷰에서는 따로 객체 이름을 지정해서 전달하지 않아서요)status=ACTIVE인 쿼리만 불러오기 위해product_qs에 filter를 걸었더니 전체 목록이 나오더라구요. 그럼 제가 그동안 참고하고 있던(화면에 리스트가 보여지는)것은ProductListView에서 어떤 쿼리셋을 참고하고 있던 것인가요?
product_qs = Product.objects.filter(status=Product.Status.ACTIVE).select_related(
"category"
)product_qs변수명을queryset으로 변경하니 필터로 걸러진 목록이 잘 나왔습니다. 그렇다면 제가 변수명을 틀리게 작성하고 있었다는 것인데 어떻게 보여진 것일까요?(3번과 맥락이 비슷합니다!)
답변 1
1
안녕하세요.
장고의 CBV인 ListView에서는 ListView의 디폴트 설정으로
템플릿에서는 모델명소문자_list 이름으로 쿼리셋 객체를 참조할 수 있습니다.
혹은 object_list 이라는 이름도 지원합니다.
CBV에서 model=Product 클래스 변수 선언이 있었다면, product_list 이름이나 object_list 이름을 지원하구요.
model=Post 클래스 변수 선언이 있었다면, post_list 이름이나 object_list 이름을 지원합니다.
CBV에 context_object_name 설정을 통해 커스텀 이름을 지정할 수도 있습니다.
관련 장고 코드 : https://github.com/django/django/blob/4.2/django/views/generic/list.py#L117
이 부분은 장고 기초 내용이고, 본 강의는 아임포트와의 연동에 포커스를 두고 있어서
CBV에 대한 자세한 설명을 하진 않습니다. CBV를 비롯한 장고 기초에 대해서는
다른 강의 "파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트"에서 다루고 있습니다.
---

위 클래스에서 model과 queryset은 클래스 변수입니다. 어딘가에서 이 값을 참조하는 로직이 있어야 의미가 있습니다.
ListView 클래스에서는 model과 queryset 이름의 클래스 변수가 있다면 참조하는 로직이 있습니다. 약속인거죠.
ListView에 model과 queryset 등의 클래스 변수에 대한 디폴트 설정이 있고,
우리가 정의하는 ListView를 상속받은 클래스에서는 필요하다면, 기존 클래스 변수에 대한 재정의(override)를 하는 것입니다.
아래와 같이 product_qs 이름의 클래스 변수를 선언하셨다면,

ListView 클래스 내에서 product_qs 클래스 변수를 참조하는 로직이 없기 때문에, product_qs 클래스 변수는 아무런 역할을 하지 않습니다.
구현하신 ProductListView 클래스에서 product_qs 클래스 변수를 참조하는 로직을 직접 구현하신다면 의미가 있을 수도 있겠죠. 하지만 특별히 그렇게 구현할 이유는 없을 것입니다.
CBV는 클래스 상속 문법을 통해, View 구현의 중복을 극적으로 줄여주는 장고의 핵심 기능입니다.
다른 프레임워크에는 없는, 장고 만의 강력한 기능입니다.
살펴보시고 또 질문 남겨주세요.
화이팅입니다. ;-)
(질문)KG이니시스 팝업차단 문제 발생(강의 13. 자바스크립트만으로 포트원 결제 구현하기, 7분18초)
1
172
2
로그아웃 405 에러
0
173
1
웹훅 사용과 관련하여 질문 드립니다.
0
248
2
cancel에 대해 질문을 드립니다.
0
148
2
m_redirect_url에 대해 문의 드립니다.
0
154
1
cancle에 대해 문의 드립니다.
0
298
3
db_constraint=False 에 대해 질문 드립니다.
0
171
2
pip 설치시 에러가 발생합니다.
0
502
2
주문 로직
0
372
3
결제 기능을 비동기적으로 처리할 필요는 없나요..?
0
415
3
배포환경과 개발환경 패키지 관리, 도커환경 디버깅 팁이 있을까요?
0
295
4
8강 주문 모델 설계에서 따로 ManyToMany 관계를 위한 모델을 선언해준 이유?
0
139
2
product model에서 category는 FK로 주셨는데, status는 왜 chocies로 주신 이유?
0
98
2
선생님 from iamport import Iamport 에서 에러가 생깁니다.
0
155
2
db_index=True로 설정하는 이유
0
144
2
안녕하세요 파이참 폼링크 제출했습니다
0
111
1
포트원 UI가 바뀌면서 포트원 404에러가 발생합니다.
0
605
5
djlint 편집시 무한 동작
0
132
1
결제 실패
0
232
1
환불을 구현 하려면 어떤식으로 해야 되나여?
0
504
1
next js 에서 결제 구현할때 에러 발생하는데 디버깅 팁 주실수 있나요?
0
315
1
사용자가 진행을 중단하였습니다.
0
358
3
결제창 출력이 되지 않습니다.
0
868
2
결제 중간 이탈
0
332
2





