通用编辑视图¶
本页面描述了以下视图,它们为编辑内容提供了基础。
另请参阅
该消息框架包含SuccessMessageMixin
,它有助于显示有关表单提交成功的消息。
注意
本页面上的一些示例假设已在myapp/models.py
中定义了如下Author
模型。
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 ContactFormView(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
页面使用template_name_suffix
为'_form'
。例如,对于创建示例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 AuthorCreateView(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
页面使用template_name_suffix
为'_form'
。例如,对于更新示例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 AuthorUpdateView(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
获取此视图,它将显示一个确认页面,该页面应包含一个 POST 到同一 URL 的表单。祖先 (MRO)
此视图继承以下视图的方法和属性。
属性
- form_class¶
继承自
BaseDeleteView
。将用于确认请求的表单类。默认情况下为django.forms.Form
,导致一个始终有效的空表单。通过提供您自己的
Form
子类,您可以添加其他要求,例如确认复选框。
- template_name_suffix¶
显示给
GET
请求的DeleteView
页面使用template_name_suffix
为'_confirm_delete'
。例如,对于删除示例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 AuthorDeleteView(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> {{ form }} <input type="submit" value="Confirm"> </form>
- class django.views.generic.edit.BaseDeleteView¶
删除对象实例的基本视图。它不打算直接使用,而是作为
django.views.generic.edit.DeleteView
的父类。祖先 (MRO)
此视图继承以下视图的方法和属性。