通用编辑视图

本页介绍了以下视图,为编辑内容奠定了基础。

参见

消息框架 中包含了 SuccessMessageMixin,它方便呈现关于成功提交表单的消息。

注解

本页的一些例子假定 Author 模型已在 myapp/models.py 中定义如下:

  1. from django.db import models
  2. from django.urls import reverse
  3. class Author(models.Model):
  4. name = models.CharField(max_length=200)
  5. def get_absolute_url(self):
  6. return reverse('author-detail', kwargs={'pk': self.pk})

FormView

class django.views.generic.edit.FormView

一个显示表单的视图。错误时,重新显示验证错误的表单;成功时,重定向到一个新的 URL。

祖先(MRO)

该视图从以下视图继承方法和属性。

示例 myapp/forms.py

  1. from django import forms
  2. class ContactForm(forms.Form):
  3. name = forms.CharField()
  4. message = forms.CharField(widget=forms.Textarea)
  5. def send_email(self):
  6. # send email using the self.cleaned_data dictionary
  7. pass

示例 myapp/views.py

  1. from myapp.forms import ContactForm
  2. from django.views.generic.edit import FormView
  3. class ContactFormView(FormView):
  4. template_name = 'contact.html'
  5. form_class = ContactForm
  6. success_url = '/thanks/'
  7. def form_valid(self, form):
  8. # This method is called when valid form data has been POSTed.
  9. # It should return an HttpResponse.
  10. form.send_email()
  11. return super().form_valid(form)

示例 myapp/contact.html

  1. <form method="post">{% csrf_token %}
  2. {{ form.as_p }}
  3. <input type="submit" value="Send message">
  4. </form>

class django.views.generic.edit.BaseFormView

一个用于显示表单的基础视图。它不打算直接使用,而是作为 django.view.generic.edit.FormView 或其他显示表单的视图的父类。

祖先(MRO)

该视图从以下视图继承方法和属性。

CreateView

class django.views.generic.edit.CreateView

一个显示表单的视图,用于创建对象,重新显示带有验证错误(如果有)的表单并保存对象。

祖先(MRO)

该视图从以下视图继承方法和属性。

属性

  • 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

  1. from django.views.generic.edit import CreateView
  2. from myapp.models import Author
  3. class AuthorCreateView(CreateView):
  4. model = Author
  5. fields = ['name']

示例 myapp/author_form.html

  1. <form method="post">{% csrf_token %}
  2. {{ form.as_p }}
  3. <input type="submit" value="Save">
  4. </form>

class django.views.generic.edit.BaseCreateView

一个用于创建新对象实例的基础视图。它不打算直接使用,而是作为 django.view.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。例如,将这个属性改为 '_update_form',对于一个更新对象的视图,例如 Author 模型,将导致默认的 template_name 为``‘myapp/author_update_form.html’``

  • object

    当使用 UpdateView 时,你可以访问 self.object,也就是被更新的对象。

示例 myapp/views.py

  1. from django.views.generic.edit import UpdateView
  2. from myapp.models import Author
  3. class AuthorUpdateView(UpdateView):
  4. model = Author
  5. fields = ['name']
  6. template_name_suffix = '_update_form'

示例 myapp/author_update_form.html

  1. <form method="post">{% csrf_token %}
  2. {{ form.as_p }}
  3. <input type="submit" value="Update">
  4. </form>

class django.views.generic.edit.BaseUpdateView

一个用于更新现有对象实例的基础视图。它不打算直接使用,而是作为 django.view.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

    New in Django 4.0.

    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

  1. from django.urls import reverse_lazy
  2. from django.views.generic.edit import DeleteView
  3. from myapp.models import Author
  4. class AuthorDeleteView(DeleteView):
  5. model = Author
  6. success_url = reverse_lazy('author-list')

示例 myapp/author_confirm_delete.html

  1. <form method="post">{% csrf_token %}
  2. <p>Are you sure you want to delete "{{ object }}"?</p>
  3. {{ form }}
  4. <input type="submit" value="Confirm">
  5. </form>

class django.views.generic.edit.BaseDeleteView

一个用于删除对象实例的基础视图。它不打算直接使用,而是作为 django.view.generic.edit.DeleteView 的父类。

祖先(MRO)

该视图从以下视图继承方法和属性。

Changed in Django 4.0:

In older versions, BaseDeleteView does not inherit from FormMixin.