一般的な編集ビュー—Djangoドキュメント
一般的な編集ビュー
このページでは、次のビューについて説明し、コンテンツを編集するための基盤を提供します。
django.views.generic.edit.FormView
django.views.generic.edit.CreateView
django.views.generic.edit.UpdateView
django.views.generic.edit.DeleteView
ノート
このページのいくつかの例は、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.edit.BaseFormView
例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 ContactView(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>
CreateView
- class django.views.generic.edit.CreateView
オブジェクトを作成し、検証エラー(存在する場合)を含むフォームを再表示し、オブジェクトを保存するためのフォームを表示するビュー。
祖先(MRO)
このビューは、次のビューからメソッドと属性を継承します。
django.views.generic.detail.SingleObjectTemplateResponseMixin
django.views.generic.edit.BaseCreateView
属性
- 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 AuthorCreate(CreateView): model = Author fields = ['name']
例myapp / author_form.html :
<form method="post">{% csrf_token %} {{ form.as_p }} <input type="submit" value="Save"> </form>
UpdateView
- class django.views.generic.edit.UpdateView
既存のオブジェクトを編集し、検証エラー(存在する場合)を使用してフォームを再表示し、オブジェクトへの変更を保存するためのフォームを表示するビュー。 これは、オブジェクトのモデルクラスから自動的に生成されたフォームを使用します(フォームクラスが手動で指定されている場合を除く)。
祖先(MRO)
このビューは、次のビューからメソッドと属性を継承します。
django.views.generic.detail.SingleObjectTemplateResponseMixin
django.views.generic.edit.BaseUpdateView
属性
- 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 AuthorUpdate(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>
DeleteView
- class django.views.generic.edit.DeleteView
確認ページを表示し、既存のオブジェクトを削除するビュー。 指定されたオブジェクトは、リクエストメソッドが
POST
の場合にのみ削除されます。 このビューがGET
を介してフェッチされると、同じURLにPOSTするフォームを含む確認ページが表示されます。祖先(MRO)
このビューは、次のビューからメソッドと属性を継承します。
django.views.generic.detail.SingleObjectTemplateResponseMixin
django.views.generic.edit.BaseDeleteView
django.views.generic.detail.BaseDetailView
属性
- 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 AuthorDelete(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>