# Django 5.0.9.dev20240806133106 ドキュメント

# ジェネリック編集ビュー (Generic editing view)

以下のビューは、このページで説明され、内容を編集するための基礎を提供します:

- `django.views.generic.edit.FormView`
- `django.views.generic.edit.CreateView`
- `django.views.generic.edit.UpdateView`
- `django.views.generic.edit.DeleteView`

参考

メッセージフレームワーク には `SuccessMessageMixin` が含まれており、フォーム送信の成功に関するメッセージを表示できます。

注釈

このページの例のいくつかは、`Author` モデルが下記の通り `myapp/models.py` 内で定義されているものと見なしています。

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

    class Author(models.Model):
        name = models.CharField(max_length=200)

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

## `FormView`

class `django.views.generic.edit.``FormView`

  フォームを描画するビューです。エラー時には、バリデーションエラーとともにフォームを再描画します。成功時には、新しい URL にリダイレクトします。

  継承元 (MRO)

  このメソッドは、以下のビューからメソッドと属性を継承しています:

  - `django.views.generic.base.TemplateResponseMixin`
  - `django.views.generic.edit.BaseFormView`
  - `django.views.generic.edit.FormMixin`
  - `django.views.generic.edit.ProcessFormView`
  - `django.views.generic.base.View`

  例 myapp/forms.py:

      from django import forms

      class ContactForm(forms.Form):
          name = forms.CharField()
          message = forms.CharField(widget=forms.Textarea)

          def send_email(self):
              # send email using the self.cleaned_data dictionary
              pass

  例 myapp/views.py:

      from myapp.forms import ContactForm
      from django.views.generic.edit import FormView

      class ContactFormView(FormView):
          template_name = "contact.html"
          form_class = ContactForm
          success_url = "/thanks/"

          def form_valid(self, form):
              # This method is called when valid form data has been POSTed.
              # It should return an HttpResponse.
              form.send_email()
              return super().form_valid(form)

  例 myapp/contact.html:

      <form method="post">{% csrf_token %}
          {{ form.as_p }}
          <input type="submit" value="Send message">
      </form>

class `django.views.generic.edit.``BaseFormView`

  フォームを表示するための基本ビューです。直接使用するのではなく、 `django.views.generic.edit.FormView` やフォームを表示する他のビューの親クラスとして使用することを想定しています。

  継承元 (MRO)

  このメソッドは、以下のビューからメソッドと属性を継承しています:

  - `django.views.generic.edit.FormMixin`
  - `django.views.generic.edit.ProcessFormView`

## `CreateView`

class `django.views.generic.edit.``CreateView`

  オブジェクトの作成、(もしある場合は) バリデーションエラーとフォームの再描画、そしてオブジェクトの保存のフォームを表示するビューです。

  継承元 (MRO)

  このメソッドは、以下のビューからメソッドと属性を継承しています:

  - `django.views.generic.detail.SingleObjectTemplateResponseMixin`
  - `django.views.generic.base.TemplateResponseMixin`
  - `django.views.generic.edit.BaseCreateView`
  - `django.views.generic.edit.ModelFormMixin`
  - `django.views.generic.edit.FormMixin`
  - `django.views.generic.detail.SingleObjectMixin`
  - `django.views.generic.edit.ProcessFormView`
  - `django.views.generic.base.View`

  属性

  `template_name_suffix`

    `GET` リクエストに描画された `CreateView` のページは、`'_form'` の `template_name_suffix` を使います。 例えば、この属性をオブジェクト (例えば `Author` モデル) を作成するビューのために `'_create_form'` に変更すると、 デフォルトの `template_name` は `'myapp/author_create_form.html'` となります。

  `object`

    `CreateView` を使うとき、`self.object` にアクセスできます。これは作成されているオブジェクトです。オブジェクトがまだ作成されていない場合、値は `None` になります。

  例 myapp/views.py:

      from django.views.generic.edit import CreateView
      from myapp.models import Author

      class AuthorCreateView(CreateView):
          model = Author
          fields = ["name"]

  例 myapp/author_form.html:

      <form method="post">{% csrf_token %}
          {{ form.as_p }}
          <input type="submit" value="Save">
      </form>

class `django.views.generic.edit.``BaseCreateView`

  新しいオブジェクトのインスタンスを作成するためのベースビューです。直接使用するのではなく、 `django.views.generic.edit.CreateView` の親クラスとして使用することを想定しています。

  継承元 (MRO)

  このメソッドは、以下のビューからメソッドと属性を継承しています:

  - `django.views.generic.edit.ModelFormMixin`
  - `django.views.generic.edit.ProcessFormView`

  メソッド

  `get`(request, *args, **kwargs)

    現在のオブジェクトインスタンス (`self.object`) に `None` をセットします。

  `post`(request, *args, **kwargs)

    現在のオブジェクトインスタンス (`self.object`) に `None` をセットします。

## `UpdateView`

class `django.views.generic.edit.``UpdateView`

  現存するオブジェクトの編集、(もしある場合は) バリデーションエラーとフォームの再描画、そしてオブジェクトの保存のフォームを表示するビューです。(フォームのクラスが手動で指定されていない限り) オブジェクトのモデルのクラスから自動的に生成されたフォームを使います。

  継承元 (MRO)

  このメソッドは、以下のビューからメソッドと属性を継承しています:

  - `django.views.generic.detail.SingleObjectTemplateResponseMixin`
  - `django.views.generic.base.TemplateResponseMixin`
  - `django.views.generic.edit.BaseUpdateView`
  - `django.views.generic.edit.ModelFormMixin`
  - `django.views.generic.edit.FormMixin`
  - `django.views.generic.detail.SingleObjectMixin`
  - `django.views.generic.edit.ProcessFormView`
  - `django.views.generic.base.View`

  属性

  `template_name_suffix`

    `GET` リクエストに描画された `UpdateView` のページは、`'_form'` の `template_name_suffix` を使います。 例えば、この属性をオブジェクト (例えば `Author` モデル) を作成するビューのために `'_update_form'` に変更すると、 デフォルトの `template_name` は `'myapp/author_update_form.html'` となります。

  `object`

    `UpdateView` を使うとき、`self.object` にアクセスできます。これは更新されているオブジェクトです。

  例 myapp/views.py:

      from django.views.generic.edit import UpdateView
      from myapp.models import Author

      class AuthorUpdateView(UpdateView):
          model = Author
          fields = ["name"]
          template_name_suffix = "_update_form"

  例 myapp/author_update_form.html:

      <form method="post">{% csrf_token %}
          {{ form.as_p }}
          <input type="submit" value="Update">
      </form>

class `django.views.generic.edit.``BaseUpdateView`

  既存のオブジェクトインスタンスを更新するためのベースビューです。直接使用するのではなく、 `django.views.generic.edit.UpdateView` の親クラスとして使用することを想定しています。

  継承元 (MRO)

  このメソッドは、以下のビューからメソッドと属性を継承しています:

  - `django.views.generic.edit.ModelFormMixin`
  - `django.views.generic.edit.ProcessFormView`

  メソッド

  `get`(request, *args, **kwargs)

    現在のオブジェクトインスタンス (`self.object`) をセットします。

  `post`(request, *args, **kwargs)

    現在のオブジェクトインスタンス (`self.object`) をセットします。

## `DeleteView`

class `django.views.generic.edit.``DeleteView`

  確認ページを表示して、現存するオブジェクトを削除するビューです。与えられたオブジェクトは、リクエストメソッドが `POST` の場合、単に削除されます。もしこのビューが `GET` を通じて取得された場合は、同じ URL に POST するフォームを含む確認画面を表示します。

  継承元 (MRO)

  このメソッドは、以下のビューからメソッドと属性を継承しています:

  - `django.views.generic.detail.SingleObjectTemplateResponseMixin`
  - `django.views.generic.base.TemplateResponseMixin`
  - `django.views.generic.edit.BaseDeleteView`
  - `django.views.generic.edit.DeletionMixin`
  - `django.views.generic.edit.FormMixin`
  - `django.views.generic.base.ContextMixin`
  - `django.views.generic.detail.BaseDetailView`
  - `django.views.generic.detail.SingleObjectMixin`
  - `django.views.generic.base.View`

  属性

  `form_class`

    `BaseDeleteView` から継承されています。リクエストの確認に使用するフォームクラスです。デフォルトでは `django.forms.Form` で、常に有効な空のフォームになります。

    独自の `Form` サブクラスを提供することで、例えば確認のチェックボックスのような要件を追加できます。

  `template_name_suffix`

    `GET` リクエストに描画された `DeleteView` のページは、`'_confirm_delete'` の `template_name_suffix` を使います。 例えば、この属性をオブジェクト (例えば `Author` モデル) を作成するビューのために `'_check_delete'` に変更すると、 デフォルトの `template_name` は `'myapp/author_check_delete.html'` となります。

  例 myapp/views.py:

      from django.urls import reverse_lazy
      from django.views.generic.edit import DeleteView
      from myapp.models import Author

      class AuthorDeleteView(DeleteView):
          model = Author
          success_url = reverse_lazy("author-list")

  例 myapp/author_confirm_delete.html:

      <form method="post">{% csrf_token %}
          <p>Are you sure you want to delete "{{ object }}"?</p>
          {{ form }}
          <input type="submit" value="Confirm">
      </form>

class `django.views.generic.edit.``BaseDeleteView`

  オブジェクトインスタンスを削除するためのベースビューです。直接使用するのではなく、 `django.views.generic.edit.DeleteView` の親クラスとして使用することを想定しています。

  継承元 (MRO)

  このメソッドは、以下のビューからメソッドと属性を継承しています:

  - `django.views.generic.edit.DeletionMixin`
  - `django.views.generic.edit.FormMixin`
  - `django.views.generic.detail.BaseDetailView`