Django e-commerce part69 Order List
Order List Viewを作成する
Generic display views | Django documentation | Django
orders/views.py に、class OrderListView を追記する。
from django.views.generic.list import ListView class OrderList(ListView): queryset = Order.objects.all() def get_queryset(self): user_check_id = self.request.session.get("user_checkout_id") user_checkout = UserCheckout.objects.get(id=user_check_id) return super(OrderList, self).get_queryset().filter(user=user_checkout)
ポイント
- get_queryset メソッドを上書きして、sessionから、user_checkout_idで、Orderのリストを特定のユーザーのものに絞り込む。get_querysetについては、公式ドキュメントを参照。 Multiple object mixins | Django documentation | Django
templateを作成する orders/order_list.html
{% extends "base.html" %} {% block content %} {% for object in object_list %} <li> {{ object.id }} {{ object.cart.items.all }} </li> {% endfor %} {% endblock %}
object_listは、OrderList.get_queryset()の結果のため、userによってフィルターがかかった、リストが表示される。
ただし、checkout_idで絞り込んでいるため、何か買い物をしてcheckout_idをゲットするか、checkout_idをログインなどのタイミングでゲットするか、checkout_id以外で絞り込むかの対策が必要になる。
また、ユーザー以外の人も購入履歴を観れてしまうので、それも修正の必要があり。