generic-editing.txt 6.9 KB

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