Djangoroidの奮闘記

python,django,angularJS1~三十路過ぎたプログラマーの奮闘記

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以外で絞り込むかの対策が必要になる。

  • また、ユーザー以外の人も購入履歴を観れてしまうので、それも修正の必要があり。