generic-editing.txt 6.1 KB

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