Python | プログラミング学習 Djang.[在庫管理] #04.04.03 Detail

django004.04.03

PythonのWebアプリケーションフレームワーク”Django”について無料で学習します。
今回は”DetailView”クラスについて学習します。

“DetailView”クラスは継承する事によってモデルクラスからPKに紐づくデータを全て引っ張る事が出来ます。

準備

※仮想環境”venv”にて進めます。

環境

環境version備考(コマンド)
Rocky Linux8.4cat /etc/redhat-release
Python3.6.8python -V
Django3.2django-admin –version

開発

urls

detail/<int:pk>/ #pkを渡す
orderPro/orderApp/urls.py
from django.urls import path

# view.pyをインポート
from . import views

# アプリ名を定義
app_name = "App"

# path(呼び出しアドレス, viewの呼び出す関数, path名)
urlpatterns = [
    path("",views.Index.as_view(), name="index"),
    path("userTrade/detail/<int:pk>/",views.UserDetail.as_view(), name="userTradeDetail"),          # ユーザー詳細
    path("detail/<int:pk>/",views.OrderDetail.as_view(), name="orderDetail"), # pk値に対してOrderDetailクラスが実行
]

vies

DetailViewクラスを継承。

models.userクラスを登録。pkに合わせて紐づくデータを引っ張る。

orderPro/orderApp/views.py
from django.shortcuts import render

# Create your views here.
from django.http import HttpResponse

from django.views.generic import TemplateView
from django.views.generic import ListView
from django.views.generic import DetailView

from . import models

class Index(ListView):
    # Companyテーブル連携
    model = models.user

    # レコード情報をテンプレートに渡すオブジェクト
    context_object_name = "user_list"

    # テンプレートファイル連携
    template_name = "AppHTML/index.html"

# ユーザー詳細
class UserDetail(DetailView):
    # userテーブル連携
    model = models.userTrade
    # レコード情報をテンプレートに渡すオブジェクト
    context_object_name = "user_detail"
    # テンプレートファイル連携
    template_name = "AppHTML/user_detail.html"

class OrderDetail(DetailView):
    #userテーブル連携
    model = models.user
    #レコード情報をテンプレートに渡すオブジェクト
    context_object_name = "order_detail"
    #テンプレートファイル連携
    template_name = "AppHTML/order_detail.html"

Template

# pkをorderDtailへ渡す。"detail/<int:pk>に渡る。
{% url 'App:orderDetail' userlist.pk %}
orderPro/Template/AppHTML/index.html
{% extends "AppHTML/header.html" %}

{% block content_block %}

<h2>受注一覧</h2>
<table class="table">
  <thead>
    <tr>
        <th>ユーザー名</th>
        <th>詳細参照</th>
    </tr>
  </thead>
  <tbody>
    {% for userlist in user_list %}
    <tr>
        <td>{{ userlist.name }}</td>
        <td><a href="{% url 'App:orderDetail' userlist.pk %}">詳細</a></td>
    </tr>
    {% endfor %}
  </tbody>
</table>

<div class="container">
  <br>
</div>
{% endblock %}

OrderDetailクラスで” context_object_name “へ設定した”order_detail”が”order_detail.name”になります。

order_detail.User.all “は”User”はForeignkeyの”related_name”にあたります。

 ★Userはモデルクラスの"orderItem"の"related_name='User'"に該当する。
 user = models.ForeignKey(user,related_name='User',on_delete=models.CASCADE, null=True, blank=True)
orderPro/Template/AppHTML/order_detail.html
{% extends "AppHTML/header.html" %}

{% block content_block %}
<div class="jumbotron">
  <h2>ユーザー詳細</h2>
  <table class="table">
    <thead>
      <tr>
        <th scope="col">ユーザー</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td>{{ order_detail.name }}</td>
      </tr>
    <tbody>
  </table>
  <div class="container">
    <br>
  </div>

  <h2>受注一覧</h2>
  <table class="table">
    <thead>
      <tr>
          <th scope="col">記入日</th>
          <th scope="col">納入日</th>
          <th scope="col">納入日(変更)</th>
          <th scope="col">仕入れ先</th>
          <th scope="col">商品 </th>
          <th scope="col">規格</th>
          <th scope="col">数量</th>
          <th scope="col">仕入れ値</th>
          <th scope="col">売り値</th>
          <th scope="col">利益</th>
          <th scope="col">備考</th>
      </tr>
    </thead>
    <tbody>
      {% for order in order_detail.User.all %}
      <tr>
          <td>{{ order.createdDate }}</td>
          <td>{{ order.deliveryDate }}</td>
          <td>{{ order.deliveryDateSub }}</td>
          <td>{{ order.supplier }}</td>
          <td>{{ order.item }}</td>
          <td>{{ order.size }}</td>
          <td>{{ order.quantity }}</td>
          <td>{{ order.purchasePrice }}</td>
          <td>{{ order.sellingPrice }}</td>
          <td>{{ order.profit }}</td>
          <td>{{ order.remarks }}</td>
      </tr>
      {% endfor %}
     <tbody>
  </table>
  <div class="container">
    <br>
  </div>
</div>
{% endblock %}
orderPro/Template/AppHTML/user_delete.html
{% extends "AppHTML/header.html" %}

{% block content_block %}
<h1>本当に削除しますか?</h1>
<form method="post">
  {% csrf_token %}
  <input type="submit" class="btn btn-danger" value="削除">
  <a href="{% url 'userTradeDetail' pk=user_delete.pk %} ">キャンセル</a>
</form>
{% endblock %}

コメント

タイトルとURLをコピーしました