通用编辑视图 — Django 文档
通用编辑视图
本页描述了以下视图,并为编辑内容提供了基础:
django.views.generic.edit.FormView
django.views.generic.edit.CreateView
django.views.generic.edit.UpdateView
django.views.generic.edit.DeleteView
笔记
此页面上的一些示例假设 Author
模型已在 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
显示表单的视图。 出错时,重新显示验证错误的表单; 成功后,重定向到一个新的 URL。
祖先 (MRO)
此视图从以下视图继承方法和属性:
示例 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
示例 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)
示例 myapp/contact.html:
<form method="post">{% csrf_token %} {{ form.as_p }} <input type="submit" value="Send message"> </form>
- class django.views.generic.edit.BaseFormView
用于显示表单的基本视图。 它不打算直接使用,而是作为 django.views.generic.edit.FormView 或其他显示表单的视图的父类。
祖先 (MRO)
此视图从以下视图继承方法和属性:
CreateView
- class django.views.generic.edit.CreateView
显示用于创建对象的表单的视图,重新显示带有验证错误的表单(如果有)并保存对象。
祖先 (MRO)
此视图从以下视图继承方法和属性:
属性
- template_name_suffix
显示给
GET
请求的CreateView
页面使用'_form'
的template_name_suffix
。 例如,对于为示例Author
模型创建对象的视图,将此属性更改为'_create_form'
将导致默认template_name
为'myapp/author_create_form.html'
。
- object
使用
CreateView
时,您可以访问正在创建的对象self.object
。 如果尚未创建对象,则该值将为None
。
示例 myapp/views.py:
from django.views.generic.edit import CreateView from myapp.models import Author class AuthorCreate(CreateView): model = Author fields = ['name']
示例 myapp/author_form.html:
<form method="post">{% csrf_token %} {{ form.as_p }} <input type="submit" value="Save"> </form>
- class django.views.generic.edit.BaseCreateView
用于创建新对象实例的基本视图。 它不打算直接使用,而是作为 django.views.generic.edit.CreateView 的父类。
祖先 (MRO)
此视图从以下视图继承方法和属性:
方法
- get(request, *args, **kwargs)
将当前对象实例 (
self.object
) 设置为None
。
- post(request, *args, **kwargs)
将当前对象实例 (
self.object
) 设置为None
。
UpdateView
- class django.views.generic.edit.UpdateView
显示用于编辑现有对象的表单、重新显示带有验证错误(如果有)的表单并保存对对象的更改的视图。 这使用从对象的模型类自动生成的表单(除非手动指定表单类)。
祖先 (MRO)
此视图从以下视图继承方法和属性:
属性
- template_name_suffix
显示给
GET
请求的UpdateView
页面使用'_form'
的template_name_suffix
。 例如,对于示例Author
模型的视图更新对象,将此属性更改为'_update_form'
将导致默认template_name
为'myapp/author_update_form.html'
。
- object
使用
UpdateView
时,您可以访问正在更新的对象self.object
。
示例 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'
示例 myapp/author_update_form.html:
<form method="post">{% csrf_token %} {{ form.as_p }} <input type="submit" value="Update"> </form>
- class django.views.generic.edit.BaseUpdateView
用于更新现有对象实例的基本视图。 它不打算直接使用,而是作为 django.views.generic.edit.UpdateView 的父类。
祖先 (MRO)
此视图从以下视图继承方法和属性:
方法
- get(request, *args, **kwargs)
设置当前对象实例 (
self.object
)。
- post(request, *args, **kwargs)
设置当前对象实例 (
self.object
)。
DeleteView
- class django.views.generic.edit.DeleteView
显示确认页面并删除现有对象的视图。 只有当请求方法是
POST
时,给定的对象才会被删除。 如果此视图是通过GET
获取的,它将显示一个确认页面,该页面应包含一个发送到同一 URL 的表单。祖先 (MRO)
此视图从以下视图继承方法和属性:
属性
- template_name_suffix
显示给
GET
请求的DeleteView
页面使用'_confirm_delete'
的template_name_suffix
。 例如,对于删除示例Author
模型的对象的视图,将此属性更改为'_check_delete'
将导致默认template_name
为'myapp/author_check_delete.html'
。
示例 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')
示例 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>
- class django.views.generic.edit.BaseDeleteView
用于删除对象实例的基本视图。 它不打算直接使用,而是作为 django.views.generic.edit.DeleteView 的父类。
祖先 (MRO)
此视图从以下视图继承方法和属性: