장고 - 관리자 사이트에서 결제 상세정보 조회

  • 이번 포스트에서는 온라인 쇼핑몰 사이트를 예로 들어 고객이 결제한 상품의 상세정보를 관리자 사이트에서 확인하는 방법에 대해 알아볼 것이다.

1. 관리자 사이트에서 상세 정보로 이동할 링크 설정

  • 경로 : wps_onlineshop > order > admin.py
    1
    2
    3
    4
    5
    6
    7
    8
    from django.utils.safestring import mark_safe
    from django.shortcuts import resolve_url
    def order_detail(obj):
    # 주문 상세 정보 페이
    # 상세 페이지 링크
    url = resolve_url('admin_order_detail', obj.id)
    return mark_safe(f'<a href="{url}">detail</a>')
    order_detail.short_description = 'Detail'

2. 결제한 상품의 상세 페이지의 경로 설정

  • 경로 : order > urls.py
    1
    2
    3
    4
    5
    6
    from django.urls import path
    from .views import *

    urlpatterns = [
    path('admin/order/<int:order_id>/', admin_order_detail, name='admin_order_detail'),
    ]

3. 관리자 사이트에서 detail 클릭 시, 나타나는 페이지 작성

  • 경로 : order > views.py

    1
    2
    3
    4
    5
    6
    7
    from django.shortcuts import get_object_or_404
    from django.contrib.admin.views.decorators import staff_member_required

    @staff_member_required
    def admin_order_detail(request, order_id):
    order = get_object_or_404(Order, id=order_id)
    return render(request, 'order/admin/order_detail.html', {'order':order})
  • 경로 : order > templates > order > admin > order_detail.html

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    {% extends 'admin/base_site.html' %}

    {% block title %}
    Order {{order.id}} Detail
    {% endblock %}
    <!-- 상세 페이지 상단에 브레드크럼 네비게이션 표시(Home > Orders > Order 7 > Detail) -->
    {% block breadcrumbs %}
    <div class="breadcrumbs">
    <a href="{% url 'admin:index' %}">Home</a> &rsaquo;
    <a href="{% url 'admin:order_order_changelist' %}">Orders</a> &rsaquo;
    <a href="{% url 'admin:order_order_change' order.id %}">Order {{order.id}}</a> &rsaquo;
    Detail
    </div>
    {% endblock %}

    {% block content %}
    <h1>Order {{order.id}}</h1>
    <ul class="object-tools">
    <li>
    <!-- 인쇄 버튼 추가 -->
    <a href="#" onclick="window.print();">Print order</a>
    </li>
    </ul>
    <table>
    <tr>
    <th>Created</th>
    <td>{{order.created}}</td>
    </tr>
    <tr>
    <th>Customer</th>
    <td>{{order.first_name}} {{order.last_name}}</td>
    </tr>
    <tr>
    <th>E-mail</th>
    <td>{{order.email}}</td>
    </tr>
    <tr>
    <th>Address</th>
    <td>{{order.address}} {{order.postal_code}} {{order.city}}</td>
    </tr>
    <tr>
    <th>Total amount</th>
    <td>{{order.get_total_price}}</td>
    </tr>
    </table>
    <br>
    <h2>Product List</h2>
    <table class="table table-striped">
    <thead>
    <tr>
    <th>#</th>
    <th>Name</th>
    <th>Unit Price</th>
    <th>Quantity</th>
    <th>Price</th>
    </tr>
    </thead>
    {% for item in order.items.all %}
    <tr>
    <td>{{forloop.counter}}</td>
    <td>{{item.product.name}}</td>
    <td>{{item.price}}</td>
    <td>{{item.quantity}}</td>
    <td>{{item.get_item_total_price}}</td>
    </tr>
    {% endfor %}
    </table>
    {% endblock %}