---
title: "编辑混入"
version: 5.1
locale: zh-hans
source: https://docs.djangoproject.com/zh-hans/5.1/ref/class-based-views/mixins-editing/
canonical: https://djangodocs.dev/zh-hans/5.1/ref/class-based-views/mixins-editing/
---
# 编辑混入

以下混入用于构建 Django 的编辑视图。

- [`django.views.generic.edit.FormMixin`](#django.views.generic.edit.FormMixin)
- [`django.views.generic.edit.ModelFormMixin`](#django.views.generic.edit.ModelFormMixin)
- [`django.views.generic.edit.ProcessFormView`](#django.views.generic.edit.ProcessFormView)
- [`django.views.generic.edit.DeletionMixin`](#django.views.generic.edit.DeletionMixin)

> **Note**
>
> 如何将这些视图组合成编辑视图的例子可以在 [通用编辑视图](/zh-hans/5.1/ref/class-based-views/generic-editing/) 的文档中找到。

## `FormMixin`

#### `class django.views.generic.edit.FormMixin`

一个提供创建和显示表单的设施的混入类。

**混入**

- [`django.views.generic.base.ContextMixin`](/zh-hans/5.1/ref/class-based-views/mixins-simple/#django.views.generic.base.ContextMixin)

**方法和属性**

#### `initial`

包含表单初始数据的字典。

#### `form_class`

要实例化的表单类。

#### `success_url`

表单处理成功后重定向到的 URL。

#### `prefix`

生成的表单的 [`prefix`](/zh-hans/5.1/ref/forms/api/#django.forms.Form.prefix)。

#### `get_initial()`

检索表单的初始数据。默认情况下，返回 [`initial`](#django.views.generic.edit.FormMixin.initial) 的副本。

#### `get_form_class()`

检索要实例化的表单类。默认 `form_class`。

#### `get_form(form_class=None)`

使用 [`get_form_kwargs()`](#django.views.generic.edit.FormMixin.get_form_kwargs) 实例化 `form_class`。如果没有提供 `form_class`，将使用 [`get_form_class()`](#django.views.generic.edit.FormMixin.get_form_class)。

#### `get_form_kwargs()`

构建实例化表单所需的关键字参数。

`initial` 参数设置为 [`get_initial()`](#django.views.generic.edit.FormMixin.get_initial)。如果请求是 `POST` 或 `PUT`，还将提供请求数据（`request.POST` 和 `request.FILES`）。

#### `get_prefix()`

为生成的表单确定 [`prefix`](/zh-hans/5.1/ref/forms/api/#django.forms.Form.prefix)。默认返回 [`prefix`](#django.views.generic.edit.FormMixin.prefix)。

#### `get_success_url()`

当表单成功验证后，确定重定向到的 URL。默认返回 [`success_url`](#django.views.generic.edit.FormMixin.success_url)。

#### `form_valid(form)`

重定向到 [`get_success_url()`](#django.views.generic.edit.FormMixin.get_success_url)。

#### `form_invalid(form)`

渲染一个响应，提供无效的表单作为上下文。

#### `get_context_data(**kwargs)`

调用 [`get_form()`](#django.views.generic.edit.FormMixin.get_form) 并将结果添加到名为 'form' 的上下文数据中。

## `ModelFormMixin`

#### `class django.views.generic.edit.ModelFormMixin`

一个在 `ModelForms` 上工作的表单混入，而不是一个独立的表单。

由于这是 [`SingleObjectMixin`](/zh-hans/5.1/ref/class-based-views/mixins-single-object/#django.views.generic.detail.SingleObjectMixin) 的一个子类，所以这个混入的实例可以访问 [`model`](/zh-hans/5.1/ref/class-based-views/mixins-single-object/#django.views.generic.detail.SingleObjectMixin.model) 和 [`queryset`](/zh-hans/5.1/ref/class-based-views/mixins-single-object/#django.views.generic.detail.SingleObjectMixin.queryset) 属性，描述 `ModelForm` 所操纵的对象类型。

如果你同时指定了 [`fields`](#django.views.generic.edit.ModelFormMixin.fields) 和 [`form_class`](#django.views.generic.edit.FormMixin.form_class) 属性，将引发 [`ImproperlyConfigured`](/zh-hans/5.1/ref/exceptions/#django.core.exceptions.ImproperlyConfigured) 异常。

**混入**

- [`django.views.generic.edit.FormMixin`](#django.views.generic.edit.FormMixin)
- [`django.views.generic.detail.SingleObjectMixin`](/zh-hans/5.1/ref/class-based-views/mixins-single-object/#django.views.generic.detail.SingleObjectMixin)

**方法和属性**

#### `model`

一个模型类。可以明确提供，否则将通过检查 `self.object` 或 [`queryset`](/zh-hans/5.1/ref/class-based-views/mixins-single-object/#django.views.generic.detail.SingleObjectMixin.queryset) 来确定。

#### `fields`

字段名的列表。这与 [`ModelForm`](/zh-hans/5.1/topics/forms/modelforms/#django.forms.ModelForm) 的 `Meta.fields` 属性的解释方式相同。

如果你是自动生成表单类，这个属性是必须的（比如使用 `model`）。忽略这个属性将导致 [`ImproperlyConfigured`](/zh-hans/5.1/ref/exceptions/#django.core.exceptions.ImproperlyConfigured) 异常。

#### `success_url`

表单处理成功后重定向到的 URL。

`success_url` 可以包含字典字符串格式，它将被插入到对象的字段属性中。例如，你可以使用 `success_url="/polls/{slug}/"` 来重定向到一个由模型上的 `slug` 字段组成的 URL。

#### `get_form_class()`

检索要实例化的表单类。如果提供了 [`form_class`](#django.views.generic.edit.FormMixin.form_class)，将使用该类。否则，将使用与 [`queryset`](/zh-hans/5.1/ref/class-based-views/mixins-single-object/#django.views.generic.detail.SingleObjectMixin.queryset) 相关联的模型，或与 [`model`](/zh-hans/5.1/ref/class-based-views/mixins-single-object/#django.views.generic.detail.SingleObjectMixin.model) 实例化，这取决于提供的属性。

#### `get_form_kwargs()`

将当前实例（`self.object`）添加到标准 [`get_form_kwargs()`](#django.views.generic.edit.FormMixin.get_form_kwargs) 中。

#### `get_success_url()`

当表单成功验证后，确定重定向到的 URL。如果提供了 [`django.views.generic.edit.ModelFormMixin.success_url`](#django.views.generic.edit.ModelFormMixin.success_url)，则返回它；否则，尝试使用对象的 `get_absolute_url()`。

#### `form_valid(form)`

保存表单实例，为视图设置当前对象，并重定向到 [`get_success_url()`](#django.views.generic.edit.FormMixin.get_success_url)。

#### `form_invalid(form)`

渲染一个响应，提供无效的表单作为上下文。

## `ProcessFormView`

#### `class django.views.generic.edit.ProcessFormView`

一个提供基本 HTTP GET 和 POST 工作流程的混入。

> **Note**
>
> 这个命名为 'ProcessFormView'，直接继承自 `django.view.generic.base.View`，但如果独立使用就会中断，所以它更像是一个混入。

**扩展**

- [`django.views.generic.base.View`](/zh-hans/5.1/ref/class-based-views/base/#django.views.generic.base.View)

**方法和属性**

#### `get(request, *args, **kwargs)`

使用 [`get_context_data()`](#django.views.generic.edit.FormMixin.get_context_data) 创建的上下文来渲染响应。

#### `post(request, *args, **kwargs)`

构造一个表单，检查表单的有效性，并进行相应的处理。

#### `put(*args, **kwargs)`

`PUT` 动作也会被处理，并将所有参数传递给 [`post()`](#django.views.generic.edit.ProcessFormView.post)。

## `DeletionMixin`

#### `class django.views.generic.edit.DeletionMixin`

启用对 `DELETE` HTTP 动作的处理。

**方法和属性**

#### `success_url`

当指定对象被成功删除时，重定向到的网址。

`success_url` 可以包含字典字符串格式，它将被插入到对象的字段属性中。例如，你可以使用 `success_url="/parent/{parent_id}/"` 重定向到一个模型上由 `parent_id` 字段组成的 URL。

#### `delete(request, *args, **kwargs)`

检索目标对象并调用其 `delete()` 方法，然后重定向到成功的 URL。

#### `get_success_url()`

当指定对象被成功删除时，返回重定向到的 url。默认返回 [`success_url`](#django.views.generic.edit.DeletionMixin.success_url)。
