Python | プログラミング学習 Djang.[在庫管理] #04.05 ユーザー追加

django004.05

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

環境

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

開発

urls

ユーザー追加
orderPro/orderApp/urls.py
from django.urls import path

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

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

# path(呼び出しアドレス, viewの呼び出す関数, path名)
urlpatterns = [
    # path('test', views.test, name='test'),
    path("",views.Index.as_view(), name="index"),
    path("detail/<int:pk>/",views.OrderDetail.as_view(), name="orderDetail"),
    path("user/create",views.UserCreate.as_view(), name="userCreate"),
]

vies

CreateViewクラス(DBへ新規に登録するクラス。)

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

# 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 django.views.generic import CreateView

from . import models

def test(request):
    params = {"message_me" : "Hello World"}
    return render(request, 'AppHTML/test.html', context=params)

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

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

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

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

# ユーザー登録
class UserCreate(CreateView):
    #Companyテーブル連携
    model = models.user
    #入力項目定義
    fields = ("name","remarks")
    #テンプレートファイル連携
    template_name = "AppHTML/user_create.html"
    #更新後のリダイレクト先
    def get_success_url(self):
        return reverse('App:index')

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>
        <th><a href="{% url 'App:userCreate' %}">登録</a></th>
    </tr>
  </thead>
  <tbody>
    {% for userlist in user_list %}
    <tr>
        <td>{{ userlist.name }}</td>
        <td><a href="{% url 'App:orderDetail' userlist.pk %}">詳細</a></td>
        <td>更新</td>
    </tr>
    {% endfor %}
  </tbody>
</table>

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

form.instance.pk
pkがついてるかどうかを見る。

form.as_p
viewで設定した内容を展開

orderPro/Template/AppHTML/user_create.html
-------------------------------------
{% extends "AppHTML/header.html" %}

{% block content_block %}
<h1>
  {% if not form.instance.pk %}
  ユーザー登録
  {% else %}
  ユーザー更新
  {% endif %}
</h1>
  <form method="POST">
    {% csrf_token %}
    {{ form.as_p }}
    <input type="submit" class='btn btn-primary' value="実行">
  </form>
{% endblock %}
タイトルとURLをコピーしました