一般的な編集ビュー—Djangoドキュメント

提供:Dev Guides
< DjangoDjango/docs/3.2.x/ref/class-based-views/generic-editing
移動先:案内検索

一般的な編集ビュー

このページでは、次のビューについて説明し、コンテンツを編集するための基盤を提供します。

も参照してください

メッセージフレームワークには 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)

このビューは、次のビューからメソッドと属性を継承します。

例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)

このビューは、次のビューからメソッドと属性を継承します。


CreateView

class django.views.generic.edit.CreateView

オブジェクトを作成し、検証エラー(存在する場合)を含むフォームを再表示し、オブジェクトを保存するためのフォームを表示するビュー。

祖先(MRO)

このビューは、次のビューからメソッドと属性を継承します。

属性

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)

このビューは、次のビューからメソッドと属性を継承します。

メソッド

get(request, *args, **kwargs)

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

post(request, *args, **kwargs)

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


UpdateView

class django.views.generic.edit.UpdateView

既存のオブジェクトを編集し、検証エラー(存在する場合)を使用してフォームを再表示し、オブジェクトへの変更を保存するためのフォームを表示するビュー。 これは、オブジェクトのモデルクラスから自動的に生成されたフォームを使用します(フォームクラスが手動で指定されている場合を除く)。

祖先(MRO)

このビューは、次のビューからメソッドと属性を継承します。

属性

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)

このビューは、次のビューからメソッドと属性を継承します。

メソッド

get(request, *args, **kwargs)

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

post(request, *args, **kwargs)

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


DeleteView

class django.views.generic.edit.DeleteView

確認ページを表示し、既存のオブジェクトを削除するビュー。 指定されたオブジェクトは、リクエストメソッドがPOSTの場合にのみ削除されます。 このビューがGETを介してフェッチされると、同じURLにPOSTするフォームを含む確認ページが表示されます。

祖先(MRO)

このビューは、次のビューからメソッドと属性を継承します。

属性

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>
    <input type="submit" value="Confirm">
</form>
class django.views.generic.edit.BaseDeleteView

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

祖先(MRO)

このビューは、次のビューからメソッドと属性を継承します。