| ===================== |
| Generic editing views |
| ===================== |
| |
| The following views are described on this page and provide a foundation for |
| editing content: |
| |
| * :class:`django.views.generic.edit.FormView` |
| * :class:`django.views.generic.edit.CreateView` |
| * :class:`django.views.generic.edit.UpdateView` |
| * :class:`django.views.generic.edit.DeleteView` |
| |
| .. note:: |
| |
| Some of the examples on this page assume that an ``Author`` model has been |
| defined as follows in ``myapp/models.py``:: |
| |
| from django.core.urlresolvers import reverse |
| from django.db import models |
| |
| 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 |
| |
| A view that displays a form. On error, redisplays the form with validation |
| errors; on success, redirects to a new URL. |
| |
| **Ancestors (MRO)** |
| |
| This view inherits methods and attributes from the following views: |
| |
| * :class:`django.views.generic.base.TemplateResponseMixin` |
| * ``django.views.generic.edit.BaseFormView`` |
| * :class:`django.views.generic.edit.FormMixin` |
| * :class:`django.views.generic.edit.ProcessFormView` |
| * :class:`django.views.generic.base.View` |
| |
| **Example 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 |
| |
| **Example 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(ContactView, self).form_valid(form) |
| |
| CreateView |
| ---------- |
| |
| .. class:: django.views.generic.edit.CreateView |
| |
| A view that displays a form for creating an object, redisplaying the form |
| with validation errors (if there are any) and saving the object. |
| |
| **Ancestors (MRO)** |
| |
| This view inherits methods and attributes from the following views: |
| |
| * :class:`django.views.generic.detail.SingleObjectTemplateResponseMixin` |
| * :class:`django.views.generic.base.TemplateResponseMixin` |
| * ``django.views.generic.edit.BaseCreateView`` |
| * :class:`django.views.generic.edit.ModelFormMixin` |
| * :class:`django.views.generic.edit.FormMixin` |
| * :class:`django.views.generic.detail.SingleObjectMixin` |
| * :class:`django.views.generic.edit.ProcessFormView` |
| * :class:`django.views.generic.base.View` |
| |
| **Attributes** |
| |
| .. attribute:: template_name_suffix |
| |
| The ``CreateView`` page displayed to a ``GET`` request uses a |
| ``template_name_suffix`` of ``'_form'``. For |
| example, changing this attribute to ``'_create_form'`` for a view |
| creating objects for the example ``Author`` model would cause the |
| default ``template_name`` to be ``'myapp/author_create_form.html'``. |
| |
| **Example views.py**:: |
| |
| from django.views.generic.edit import CreateView |
| from myapp.models import Author |
| |
| class AuthorCreate(CreateView): |
| model = Author |
| |
| UpdateView |
| ---------- |
| |
| .. class:: django.views.generic.edit.UpdateView |
| |
| A view that displays a form for editing an existing object, redisplaying |
| the form with validation errors (if there are any) and saving changes to |
| the object. This uses a form automatically generated from the object's |
| model class (unless a form class is manually specified). |
| |
| **Ancestors (MRO)** |
| |
| This view inherits methods and attributes from the following views: |
| |
| * :class:`django.views.generic.detail.SingleObjectTemplateResponseMixin` |
| * :class:`django.views.generic.base.TemplateResponseMixin` |
| * ``django.views.generic.edit.BaseUpdateView`` |
| * :class:`django.views.generic.edit.ModelFormMixin` |
| * :class:`django.views.generic.edit.FormMixin` |
| * :class:`django.views.generic.detail.SingleObjectMixin` |
| * :class:`django.views.generic.edit.ProcessFormView` |
| * :class:`django.views.generic.base.View` |
| |
| **Attributes** |
| |
| .. attribute:: template_name_suffix |
| |
| The ``UpdateView`` page displayed to a ``GET`` request uses a |
| ``template_name_suffix`` of ``'_form'``. For |
| example, changing this attribute to ``'_update_form'`` for a view |
| updating objects for the example ``Author`` model would cause the |
| default ``template_name`` to be ``'myapp/author_update_form.html'``. |
| |
| **Example views.py**:: |
| |
| from django.views.generic.edit import UpdateView |
| from myapp.models import Author |
| |
| class AuthorUpdate(UpdateView): |
| model = Author |
| |
| DeleteView |
| ---------- |
| |
| .. class:: django.views.generic.edit.DeleteView |
| |
| A view that displays a confirmation page and deletes an existing object. |
| The given object will only be deleted if the request method is ``POST``. If |
| this view is fetched via ``GET``, it will display a confirmation page that |
| should contain a form that POSTs to the same URL. |
| |
| **Ancestors (MRO)** |
| |
| This view inherits methods and attributes from the following views: |
| |
| * :class:`django.views.generic.detail.SingleObjectTemplateResponseMixin` |
| * :class:`django.views.generic.base.TemplateResponseMixin` |
| * ``django.views.generic.edit.BaseDeleteView`` |
| * :class:`django.views.generic.edit.DeletionMixin` |
| * ``django.views.generic.detail.BaseDetailView`` |
| * :class:`django.views.generic.detail.SingleObjectMixin` |
| * :class:`django.views.generic.base.View` |
| |
| **Attributes** |
| |
| .. attribute:: template_name_suffix |
| |
| The ``DeleteView`` page displayed to a ``GET`` request uses a |
| ``template_name_suffix`` of ``'_confirm_delete'``. For |
| example, changing this attribute to ``'_check_delete'`` for a view |
| deleting objects for the example ``Author`` model would cause the |
| default ``template_name`` to be ``'myapp/author_check_delete.html'``. |
| |
| |
| **Example views.py**:: |
| |
| from django.views.generic.edit import DeleteView |
| from django.core.urlresolvers import reverse_lazy |
| from myapp.models import Author |
| |
| class AuthorDelete(DeleteView): |
| model = Author |
| success_url = reverse_lazy('author-list') |