Generic editing views
The following views are described on this page and provide a foundation forediting content:
django.views.generic.edit.FormView
django.views.generic.edit.CreateView
django.views.generic.edit.UpdateView
django.views.generic.edit.DeleteView
参见
The messages framework containsSuccessMessageMixin
, whichfacilitates presenting messages about successful form submissions.
注解
Some of the examples on this page assume that an Author
model has beendefined as follows in 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
- A view that displays a form. On error, redisplays the form with validationerrors; on success, redirects to a new URL.
Ancestors (MRO)
This view inherits methods and attributes from the following views:
django.views.generic.base.TemplateResponseMixin
django.views.generic.edit.BaseFormView
django.views.generic.edit.FormMixin
django.views.generic.edit.ProcessFormView
django.views.generic.base.View
Example 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
Example 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)
Example 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
- A view that displays a form for creating an object, redisplaying the formwith validation errors (if there are any) and saving the object.
Ancestors (MRO)
This view inherits methods and attributes from the following views:
django.views.generic.detail.SingleObjectTemplateResponseMixin
django.views.generic.base.TemplateResponseMixin
django.views.generic.edit.BaseCreateView
django.views.generic.edit.ModelFormMixin
django.views.generic.edit.FormMixin
django.views.generic.detail.SingleObjectMixin
django.views.generic.edit.ProcessFormView
django.views.generic.base.View
AttributesThe
CreateView
page displayed to aGET
request uses atemplate_name_suffix
of'_form'
. Forexample, changing this attribute to'_create_form'
for a viewcreating objects for the exampleAuthor
model would cause thedefaulttemplate_name
to be'myapp/author_create_form.html'
.- When using
CreateView
you have access toself.object
, which isthe object being created. If the object hasn't been created yet, thevalue will beNone
.
Example myapp/views.py:
- from django.views.generic.edit import CreateView
- from myapp.models import Author
- class AuthorCreate(CreateView):
- model = Author
- fields = ['name']
Example 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
- A view that displays a form for editing an existing object, redisplayingthe form with validation errors (if there are any) and saving changes tothe object. This uses a form automatically generated from the object'smodel class (unless a form class is manually specified).
Ancestors (MRO)
This view inherits methods and attributes from the following views:
django.views.generic.detail.SingleObjectTemplateResponseMixin
django.views.generic.base.TemplateResponseMixin
django.views.generic.edit.BaseUpdateView
django.views.generic.edit.ModelFormMixin
django.views.generic.edit.FormMixin
django.views.generic.detail.SingleObjectMixin
django.views.generic.edit.ProcessFormView
django.views.generic.base.View
AttributesThe
UpdateView
page displayed to aGET
request uses atemplate_name_suffix
of'_form'
. Forexample, changing this attribute to'_update_form'
for a viewupdating objects for the exampleAuthor
model would cause thedefaulttemplate_name
to be'myapp/author_update_form.html'
.- When using
UpdateView
you have access toself.object
, which isthe object being updated.
Example 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'
Example 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
- 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
. Ifthis view is fetched viaGET
, it will display a confirmation page thatshould contain a form that POSTs to the same URL.
Ancestors (MRO)
This view inherits methods and attributes from the following views:
django.views.generic.detail.SingleObjectTemplateResponseMixin
django.views.generic.base.TemplateResponseMixin
django.views.generic.edit.BaseDeleteView
django.views.generic.edit.DeletionMixin
django.views.generic.detail.BaseDetailView
django.views.generic.detail.SingleObjectMixin
django.views.generic.base.View
Attributes- The
DeleteView
page displayed to aGET
request uses atemplate_name_suffix
of'_confirm_delete'
. Forexample, changing this attribute to'_check_delete'
for a viewdeleting objects for the exampleAuthor
model would cause thedefaulttemplate_name
to be'myapp/author_check_delete.html'
.
Example 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')
Example 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>