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

django004.04.04

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

“UpdateView”クラスは継承する事によってモデルクラスへデータ更新することができます。

準備

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

環境

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

開発

urls

path('userTrade/update/<int:pk>/',views.UserUpdate.as_view(), name='userTradeUpdate'), 
orderPro/orderApp/urls.py
from django.urls import path

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

# path(呼び出しアドレス, viewの呼び出す関数, path名)
urlpatterns = [
    path("", views.Index.as_view(), name="index"),
    path("userTrade/create",views.UserCreate.as_view(), name="userTradeCreate"),                    # ユーザー登録
   path('userTrade/update/<int:pk>/',views.UserUpdate.as_view(), name='userTradeUpdate'),          # ユーザー更新
    path('order/delete/<int:pk>/<int:userid>',views.OrderDelete.as_view(), name='orderDelete'),     # 注文更新
]

views

UpdateViewクラスを継承します。

models.orderItem, models.userTradeクラスを登録します。

model = models.orderItem
model = models.userTrade

formを登録します。Createと同じformを使います。

form_class = OrderCreateForm
form_class = UserCreateForm
orderPro/orderApp/views.py
from django.urls import reverse
from . import models

from .forms import UserCreateForm
from django.views.generic import UpdateView


# 注文更新
class OrderUpdate(UpdateView):
    # orderItemテーブル連携
    model = models.orderItem

    template_name = "AppHTML/order_create.html"

    # form
    form_class = OrderCreateForm

    # 更新後のリダイレクト先
    def get_success_url(self, **kwargs):
        # 関数の中で解決する場合はreverse
        self.targetUser = self.kwargs.get("userid")
        return reverse("orderDetail", kwargs={"pk": self.targetUser})


# ユーザー更新
class UserUpdate(UpdateView):
    # userテーブル連携
    model = models.userTrade

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

    # 更新後のリダイレクト先
    def get_success_url(self):
        # 関数の中で解決する場合はreverse
        return reverse("userTradeDetail", kwargs={"pk": self.object.pk})

Template

formを表示

{{ form.as_p }}
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 %}

Template

order_createと同じ

{{ form.as_p }}
タイトルとURLをコピーしました