• Skip to main content
  • Skip to secondary menu
  • Skip to primary sidebar
  • Skip to footer

AI活用エンジニアへの道

生成AI時代のエンジニアの生き方を考えるメディア(作成途中)

  • コラム
  • 生成AI
  • プログラミング
    • Python入門
    • Flask入門
    • Django入門
  • プロフィール
Home / プログラミング / Django / Djangoのデータ挿入画面(CreateView), データ更新画面(UpdateView), データ削除画面(DeleteView)の基本的な使い方

Djangoのデータ挿入画面(CreateView), データ更新画面(UpdateView), データ削除画面(DeleteView)の基本的な使い方

1 CreateViewを用いたレコードの追加
2 UpdateViewを用いたレコードの更新
3 DeleteViewを用いたレコードの削除
4 関連記事

この記事では、クラスベースビューのCreateView, UpdateView, UpdateViewの利用方法について記述していく。


CreateViewを用いたレコードの追加

CreateViewの基本的な使い方を記述する。
models.pyは以下のように定義する。
(Schoolクラスにget_absolute_urlメソッドを定義しておかないと、CreateView, UpdateViewでcreate, update成功時に遷移先がなくなりエラーとなる。
詳細はこちらの記事参照)

  • models.py
from django.db import models
from django.urls import reverse

class School(models.Model):
    name = models.CharField(max_length=256)
    principal = models.CharField(max_length=256)
    location = models.CharField(max_length=256)

    def __str__(self):
        return self.name

    def get_absolute_url(self):
    # create, update成功時の遷移先を定義
        return reverse("basic_app:detail", kwargs={'pk': self.pk})

class Student(models.Model):
    name = models.CharField(max_length=256)
    age = models.PositiveIntegerField()
    school = models.ForeignKey(School, related_name='students', on_delete='CASCADE')

    def __str__(self):
        return self.name

次に、views.pyの設定を行う。
CreateViewを継承したクラスを作成してmodelを設定する。
(このmodelが今回データを挿入するモデル)

  • views.py
from django.views.generic import View, TemplateView, ListView, DetailView
from . import models

class SchoolCreateView(CreateView):
    fields = ('name', 'principal', 'location')
    # 画面のformに表示する項目

    model = models.School
    # データ挿入の対象とするモデル

urls.pyには、以下のように記述する。

  • urls.py
from django.urls import path
from basic_app import views

app_name = 'basic_app'

urlpatterns = [
    path('create', views.SchoolCreateView.as_view(), name='create'),
]

テンプレートファイルはデフォルト(template_nameを指定しない場合)で、templates/アプリ名/モデル名_form.htmlにアクセスされる。以下のように記述した。

  • school_form.html(./templates/basic_app/school_form.html)
{% extends 'basic_app/basic_app_base.html' %}

{% block body_block %}

<h1>
Create School
</h1>

    <form class="" method="post">
        {% csrf_token %}
        {{ form.as_p }}
        <input type="submit" class="btn btn-primary" value="submit">
    </form>
{% endblock %}

Djangoを立ち上げて画面を表示すると以下のように表示される。

値を入れて、submitボタンを押すと実際に値が挿入される。


UpdateViewを用いたレコードの更新

次に、UpdateViewを用いてレコードを更新していく方法について詳述していく

models.pyは以下のように記述する
  • models.py
from django.db import models
from django.urls import reverse

class School(models.Model):
    name = models.CharField(max_length=256)
    principal = models.CharField(max_length=256)
    location = models.CharField(max_length=256)

    def __str__(self):
        return self.name

    def get_absolute_url(self):
        return reverse("basic_app:detail", kwargs={'pk': self.pk})

class Student(models.Model):
    name = models.CharField(max_length=256)
    age = models.PositiveIntegerField()
    school = models.ForeignKey(School, related_name='students', on_delete='CASCADE')

    def __str__(self):
        return self.name

views.pyは簡単に記載する。

  • views.py
from django.views.generic import (
    UpdateView
)
from . import models

class SchoolUpdateView(UpdateView):
    fields = ('name', 'principal')
    # 更新対象のフィールド

    model = models.School

urls.pyは以下のように<int:pk>としてpkで値を取得できるようにする。

  • urls.py
from django.urls import path
from basic_app import views

app_name = 'basic_app'

urlpatterns = [
    path('update/<int:pk>', views.SchoolUpdateView.as_view(), name='update'),
]

テンプレートはデフォルトでtemplates/アプリ名/モデル名_form.htmlが使用される。

  • school_form.html(./templates/basic_app/school_form.html)
{% extends 'basic_app/basic_app_base.html' %}

{% block body_block %}

<h1>
    {% if not form.instance.pk %}
    Create School
    {% else %}
    Update School
    {% endif %}
</h1>

    <form class="" method="post">
        {% csrf_token %}
        {{ form.as_p }}
        <input type="submit" class="btn btn-primary" value="submit">
    </form>

{% endblock %}

Djangoを動かして、アクセスすると以下のような画面になる。

値を変更してsubmitボタンを押すと実際にレコードが変更されます、


DeleteViewを用いたレコードの削除

次に、DeleteViewを用いてレコードを削除する方法について詳述していく

まず、modelは上述したCreateView, UpdateViewと同じように定義する。

views.pyには、以下のようにmodelの設定とsuccess_urlを設定する。
success_urlの設定にはreverse_lazyを用いる。

  • views.py
from django.views.generic import (
    DeleteView
)
from . import models

class SchoolDeleteView(DeleteView):
    model = models.School
    success_url = reverse_lazy('basic_app:list')

urls.pyには以下のように記述する。

  • urls.py
from django.urls import path
from basic_app import views

app_name = 'basic_app'

urlpatterns = [
    path('delete/<int:pk>', views.SchoolDeleteView.as_view(), name='delete'),
]

最後に、templateは以下のように記述する。
DeleteViewのテンプレートはデフォルト(template_nameに指定しない場合)で、./templates/アプリ名/モデル名_confirm_delete.htmlとなる。

  • school_confirm_delete.html
{% extends 'basic_app/basic_app_base.html' %}
{% block body_block %}
<h1>Delete {{ school.name }}</h1>
<form class="" method="post">
    {% csrf_token %}
    <input type="submit" class="btn btn-danger" value="Delete">
    <a href="{% url 'basic_app:detail' pk=school.pk %}">Cancel</a>
</form>

{% endblock %}

実行すると以下のような画面が表示される。Deleteボタンを押すと実際にレコードがDeleteされる。

関連記事

現役エンジニアがDjangoに関する本を5つ紹介
現役エンジニアがDjangoに関する本を5つ紹介
WindowsでDjango、Anaconda、VSCodeのインストールとDjangoを開発する環境の構築をする
WindowsでDjango、Anaconda、VSCode…
MacでDjango、Anaconda、VSCodeのインストールとDjangoを開発する環境の構築をする
MacでDjango、Anaconda、VSCodeのインス…
DjangoのFormに初期値を設定する方法
DjangoのFormに初期値を設定する方法
DjangoでModelのsave前後で処理を行うSignalのpre_save, post_saveの使い方
DjangoでModelのsave前後で処理を行うSigna…
DjangoのModelにSlugFieldを利用する。その利用方法と
DjangoのModelにSlugFieldを利用する。その…

Primary Sidebar

人気記事

  • 1
    ITエンジニアとしてスキルを高めるためのUdemy講…
  • 2
    PyCharm,IntelliJのおすすめプラグイン一覧
  • no image 3
    Python未経験だが、フリーランスの案件に採用さ…
  • 4
    アメリカのシリコンバレーでプログラミングを無…

特集記事

  • 1
    Cursorの使用のポイントとコツ(コード補完、イ…
  • 2
    ITエンジニアとしてスキルを高めるためのUdemy講…

目次

1 CreateViewを用いたレコードの追加
2 UpdateViewを用いたレコードの更新
3 DeleteViewを用いたレコードの削除
4 関連記事
StartCode ロゴ
AI時代のエンジニアを最速で育てる
法人向けIT研修で即戦力を育成しています。詳しくはお問い合わせください。
▶ 詳細はこちら
Django講座
【Udemy】Django入門講座(0からDjangoを学習: Python講座つき)
受講生6500人ほどの人気講座。<strong>View, Template, Model, Cla...
詳細 ▶

Footer

利用規約