※仮想環境”venv”にて進めます。
環境
環境 | version | 備考(コマンド) |
Rocky Linux | 8.4 | cat /etc/redhat-release |
Python | 3.6.8 | python -V |
Django | 3.2 | django-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 %}