本页介绍了以下视图,为编辑内容奠定了基础。
django.views.generic.edit.FormViewdjango.views.generic.edit.CreateViewdjango.views.generic.edit.UpdateViewdjango.views.generic.edit.DeleteView参见
消息框架 中包含了 SuccessMessageMixin,它方便呈现关于成功提交表单的消息。
注解
本页的一些例子假定 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¶django.views.generic.edit.FormView¶一个显示表单的视图。错误时,重新显示验证错误的表单;成功时,重定向到一个新的 URL。
祖先(MRO)
该视图从以下视图继承方法和属性。
django.views.generic.base.TemplateResponseMixindjango.views.generic.edit.BaseFormViewdjango.views.generic.edit.FormMixindjango.views.generic.edit.ProcessFormViewdjango.views.generic.base.View示例 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>
django.views.generic.edit.BaseFormView¶一个用于显示表单的基础视图。它不打算直接使用,而是作为 django.view.generic.edit.FormView 或其他显示表单的视图的父类。
祖先(MRO)
该视图从以下视图继承方法和属性。
CreateView¶django.views.generic.edit.CreateView¶一个显示表单的视图,用于创建对象,重新显示带有验证错误(如果有)的表单并保存对象。
祖先(MRO)
该视图从以下视图继承方法和属性。
django.views.generic.detail.SingleObjectTemplateResponseMixindjango.views.generic.base.TemplateResponseMixindjango.views.generic.edit.BaseCreateViewdjango.views.generic.edit.ModelFormMixindjango.views.generic.edit.FormMixindjango.views.generic.detail.SingleObjectMixindjango.views.generic.edit.ProcessFormViewdjango.views.generic.base.View属性
template_name_suffix¶对 GET 请求显示的 CreateView 页面使用 '_form' 的 template_name_suffix。例如,将这个属性改为 '_create_form',为 Author 模型创建对象的视图将导致默认的 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>
UpdateView¶django.views.generic.edit.UpdateView¶显示用于编辑现有对象的表单视图,重新显示带有验证错误(如果有)的表单并保存对对象的更改。该视图使用从对象的模型类自动生成的表单(除非手动指定了表单类)。
祖先(MRO)
该视图从以下视图继承方法和属性。
django.views.generic.detail.SingleObjectTemplateResponseMixindjango.views.generic.base.TemplateResponseMixindjango.views.generic.edit.BaseUpdateViewdjango.views.generic.edit.ModelFormMixindjango.views.generic.edit.FormMixindjango.views.generic.detail.SingleObjectMixindjango.views.generic.edit.ProcessFormViewdjango.views.generic.base.View属性
template_name_suffix¶显示在 GET 请求中的 UpdateView 页面使用 '_form' 的 template_name_suffix。例如,将这个属性改为 '_update_form',对于一个更新对象的视图,例如 Author 模型,将导致默认的 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>
DeleteView¶django.views.generic.edit.DeleteView¶显示确认页面并删除现有对象的视图。只有当请求方法是 POST 时,给定的对象才会被删除。如果这个视图是通过 GET 获取的,它将显示一个确认页面,该页面应该包含一个 POST 到同一 URL 的表单。
祖先(MRO)
该视图从以下视图继承方法和属性。
django.views.generic.detail.SingleObjectTemplateResponseMixindjango.views.generic.base.TemplateResponseMixindjango.views.generic.edit.BaseDeleteViewdjango.views.generic.edit.DeletionMixindjango.views.generic.edit.FormMixindjango.views.generic.base.ContextMixindjango.views.generic.detail.BaseDetailViewdjango.views.generic.detail.SingleObjectMixindjango.views.generic.base.View属性
form_class¶Inherited from BaseDeleteView. The
form class that will be used to confirm the request. By default
django.forms.Form, resulting in an empty form that is always
valid.
By providing your own Form subclass, you can add additional
requirements, such as a confirmation checkbox, for example.
template_name_suffix¶对 GET 请求显示的 DeleteView 页面使用 '_confirm_delete' 的 template_name_suffix。例如,将这个属性改为 '_check_delete',对于一个为 Author 模型删除对象的视图,将导致默认的 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>
django.views.generic.edit.BaseDeleteView¶一个用于删除对象实例的基础视图。它不打算直接使用,而是作为 django.view.generic.edit.DeleteView 的父类。
祖先(MRO)
该视图从以下视图继承方法和属性。
django.views.generic.edit.DeletionMixindjango.views.generic.edit.FormMixindjango.views.generic.detail.BaseDetailViewIn older versions, BaseDeleteView does not inherit from
FormMixin.
12月 13, 2021