generic-editing.txt 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. =====================
  2. Generic editing views
  3. =====================
  4. The following views are described on this page and provide a foundation for
  5. editing content:
  6. * :class:`django.views.generic.edit.FormView`
  7. * :class:`django.views.generic.edit.CreateView`
  8. * :class:`django.views.generic.edit.UpdateView`
  9. * :class:`django.views.generic.edit.DeleteView`
  10. .. note::
  11. Some of the examples on this page assume that an ``Author`` model has been
  12. defined as follows in ``myapp/models.py``::
  13. from django.core.urlresolvers import reverse
  14. from django.db import models
  15. class Author(models.Model):
  16. name = models.CharField(max_length=200)
  17. def get_absolute_url(self):
  18. return reverse('author-detail', kwargs={'pk': self.pk})
  19. FormView
  20. --------
  21. .. class:: django.views.generic.edit.FormView
  22. A view that displays a form. On error, redisplays the form with validation
  23. errors; on success, redirects to a new URL.
  24. **Ancestors (MRO)**
  25. This view inherits methods and attributes from the following views:
  26. * :class:`django.views.generic.edit.FormView`
  27. * :class:`django.views.generic.base.TemplateResponseMixin`
  28. * ``django.views.generic.edit.BaseFormView``
  29. * :class:`django.views.generic.edit.FormMixin`
  30. * :class:`django.views.generic.edit.ProcessFormView`
  31. * :class:`django.views.generic.base.View`
  32. **Example forms.py**::
  33. from django import forms
  34. class ContactForm(forms.Form):
  35. name = forms.CharField()
  36. message = forms.CharField(widget=forms.Textarea)
  37. def send_email(self):
  38. # send email using the self.cleaned_data dictionary
  39. pass
  40. **Example views.py**::
  41. from myapp.forms import ContactForm
  42. from django.views.generic.edit import FormView
  43. class ContactView(FormView):
  44. template_name = 'contact.html'
  45. form_class = ContactForm
  46. success_url = '/thanks/'
  47. def form_valid(self, form):
  48. # This method is called when valid form data has been POSTed.
  49. # It should return an HttpResponse.
  50. form.send_email()
  51. return super(ContactView, self).form_valid(form)
  52. CreateView
  53. ----------
  54. .. class:: django.views.generic.edit.CreateView
  55. A view that displays a form for creating an object, redisplaying the form
  56. with validation errors (if there are any) and saving the object.
  57. **Ancestors (MRO)**
  58. This view inherits methods and attributes from the following views:
  59. * :class:`django.views.generic.edit.CreateView`
  60. * :class:`django.views.generic.detail.SingleObjectTemplateResponseMixin`
  61. * :class:`django.views.generic.base.TemplateResponseMixin`
  62. * ``django.views.generic.edit.BaseCreateView``
  63. * :class:`django.views.generic.edit.ModelFormMixin`
  64. * :class:`django.views.generic.edit.FormMixin`
  65. * :class:`django.views.generic.detail.SingleObjectMixin`
  66. * :class:`django.views.generic.edit.ProcessFormView`
  67. * :class:`django.views.generic.base.View`
  68. **Attributes**
  69. .. attribute:: template_name_suffix
  70. The ``CreateView`` page displayed to a ``GET`` request uses a
  71. ``template_name_suffix`` of ``'_form'``. For
  72. example, changing this attribute to ``'_create_form'`` for a view
  73. creating objects for the example ``Author`` model would cause the
  74. default ``template_name`` to be ``'myapp/author_create_form.html'``.
  75. **Example views.py**::
  76. from django.views.generic.edit import CreateView
  77. from myapp.models import Author
  78. class AuthorCreate(CreateView):
  79. model = Author
  80. UpdateView
  81. ----------
  82. .. class:: django.views.generic.edit.UpdateView
  83. A view that displays a form for editing an existing object, redisplaying
  84. the form with validation errors (if there are any) and saving changes to
  85. the object. This uses a form automatically generated from the object's
  86. model class (unless a form class is manually specified).
  87. **Ancestors (MRO)**
  88. This view inherits methods and attributes from the following views:
  89. * :class:`django.views.generic.edit.UpdateView`
  90. * :class:`django.views.generic.detail.SingleObjectTemplateResponseMixin`
  91. * :class:`django.views.generic.base.TemplateResponseMixin`
  92. * ``django.views.generic.edit.BaseUpdateView``
  93. * :class:`django.views.generic.edit.ModelFormMixin`
  94. * :class:`django.views.generic.edit.FormMixin`
  95. * :class:`django.views.generic.detail.SingleObjectMixin`
  96. * :class:`django.views.generic.edit.ProcessFormView`
  97. * :class:`django.views.generic.base.View`
  98. **Attributes**
  99. .. attribute:: template_name_suffix
  100. The ``UpdateView`` page displayed to a ``GET`` request uses a
  101. ``template_name_suffix`` of ``'_form'``. For
  102. example, changing this attribute to ``'_update_form'`` for a view
  103. updating objects for the example ``Author`` model would cause the
  104. default ``template_name`` to be ``'myapp/author_update_form.html'``.
  105. **Example views.py**::
  106. from django.views.generic.edit import UpdateView
  107. from myapp.models import Author
  108. class AuthorUpdate(UpdateView):
  109. model = Author
  110. DeleteView
  111. ----------
  112. .. class:: django.views.generic.edit.DeleteView
  113. A view that displays a confirmation page and deletes an existing object.
  114. The given object will only be deleted if the request method is ``POST``. If
  115. this view is fetched via ``GET``, it will display a confirmation page that
  116. should contain a form that POSTs to the same URL.
  117. **Ancestors (MRO)**
  118. This view inherits methods and attributes from the following views:
  119. * :class:`django.views.generic.edit.DeleteView`
  120. * :class:`django.views.generic.detail.SingleObjectTemplateResponseMixin`
  121. * :class:`django.views.generic.base.TemplateResponseMixin`
  122. * ``django.views.generic.edit.BaseDeleteView``
  123. * :class:`django.views.generic.edit.DeletionMixin`
  124. * ``django.views.generic.detail.BaseDetailView``
  125. * :class:`django.views.generic.detail.SingleObjectMixin`
  126. * :class:`django.views.generic.base.View`
  127. **Attributes**
  128. .. attribute:: template_name_suffix
  129. The ``DeleteView`` page displayed to a ``GET`` request uses a
  130. ``template_name_suffix`` of ``'_confirm_delete'``. For
  131. example, changing this attribute to ``'_check_delete'`` for a view
  132. deleting objects for the example ``Author`` model would cause the
  133. default ``template_name`` to be ``'myapp/author_check_delete.html'``.
  134. **Example views.py**::
  135. from django.views.generic.edit import DeleteView
  136. from django.core.urlresolvers import reverse_lazy
  137. from myapp.models import Author
  138. class AuthorDelete(DeleteView):
  139. model = Author
  140. success_url = reverse_lazy('author-list')