장고 - 관리자 사이트에서 결제 상세정보 조회
- 이번 포스트에서는 온라인 쇼핑몰 사이트를 예로 들어 고객이 결제한 상품의 상세정보를 관리자 사이트에서 확인하는 방법에 대해 알아볼 것이다.
1. 관리자 사이트에서 상세 정보로 이동할 링크 설정
- 경로 : wps_onlineshop > order > admin.py
1
2
3
4
5
6
7
8from 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
6from 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
7from django.shortcuts import get_object_or_404
from django.contrib.admin.views.decorators import 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> ›
<a href="{% url 'admin:order_order_changelist' %}">Orders</a> ›
<a href="{% url 'admin:order_order_change' order.id %}">Order {{order.id}}</a> ›
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 %}
Posted