PythonのWebアプリケーションフレームワーク”Django”について無料で学習します。
今回は”UpdateView”クラスについて学習します。
“UpdateView”クラスは継承する事によってモデルクラスへデータ更新することができます。
準備
※仮想環境”venv”にて進めます。
環境
環境 | version | 備考(コマンド) |
Rocky Linux | 8.4 | cat /etc/redhat-release |
Python | 3.6.8 | python -V |
Django | 3.2 | django-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 }}