Server/Django project 1 - shopping mall

13. Django order app 주문정보 조회하기

개발자킹콩 2020. 10. 9. 00:09

이제 주문정보 조회하는 것을 list로 만들어 보겠다. 즉, ListView를 사용할 것이다.

그 말은 페이지를 만든다는 의미이고 그로 인해 평소에 하던 순서를 반복하겠다.

 

목차

1. templates ( order.html )

2. views.py ( class OrderList )

3. urls.py ( "order/" )

4. 문제점 발생!! --> 해결 : QuerySet

5. 결과확인

 

 

 


 

 

1. templates ( order.html )

 

order / models.py

 

 

 

모델을 참고하여 템플릿에서 표시할 정보들을 수정할 것이다. 

head 에는 상품명, 수량, 주문날짜를 표시하고

body에는 DB에 저장된 순서(주문순서), 상품명, 수량, 등록날짜만 표시하도록 하자.

 

templates / order.html

 

 

 


 

2. views.py ( class OrderList )

 

이제 ListView를 상속받은 OrderList를 클래스 기반으로 정의할 것이다.

 

 

 


 

3. urls.py ( "order/" )

 

 

이제 urls.py에 해당 url을 등록만 한다면 정상적으로 접근이 가능하다.

 

 

 

 

 

현재까지 주문한 상품들이 모두 표시되었다.

 

 


 

 

4. 문제점 발생!! --> 해결 : QuerySet

 

 

어떤 문제점이 있는 것일까?

주문에 관한 해당 List의 경우 로그인된 계정의 주문 대해서만 출력이 이루어 져야하는데,

다른 사람이 주문한 정보도 볼 수 있기에 문제가 생기는 것이다.

 

 

 

다음과 같이 OrderList 의 model 속성을 Order라고 지정해 버리면

해당 데이터 정의들 모두를 List에 출력하기에 문제가 되는 것이다.

QuerySet을 직접 만들어 이를 해결하자 

 

 

 

 

 

QuerySet의 경우 어떤 데이터를 전달할 것인지 DetailView에서 배웠다.

product / views.py

 

 

 

적절한 필터링으로 내가 원하는 정보만 출력을 할 것인데, 

내가 원하는 것은 현재 로그인이 되어있는 유저가 주문한 내용만 출력하고 싶다.

 

 

 

그런데 또 문제점이 등장한다 

 

order / views.py

 

이렇게 딱 적고 보니깐...... session이 필요하다.

해당 session을 가진 데이터만 필터링해서 가져올 것이기 때문이다.

Queryset을 ( self. 이렇게 사용할 수 없으니 ) 그대로 쓸 수 없고,

적절하게 함수로 overriding해서 사용하면 되는데,

이런 함수가 또 있네... 없는게 뭐지?? 

 

 

order / views.py

 

이렇게 되면 정상적으로 해당 로그인 된 유저의 주문정보만 List로 출력된다.

 

 

 

 

 


 

 

5. 결과확인

 

order.html

결과를 쉽게 판단하기 위해 List에 유저정보도 출력하도록 하자

 

 

 

 

해당 유저들이 구매한 주문정보를 판단하기 위해 model을 되돌리고 출력한 List이다

 

 

 

 

현재 로그인 되어있는 유저를 표시하였다

 

 

 

현재 로그인 되어있는 유저의 주문정보만 필터링하여 출력되었음을 확인하였다.

 

 

 

 

 

 

 

 

이상!! 오늘도 감코!!