You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Django通用类视图时如何传递类型参数?

Django FormView传递表单类型的正确方式

你遇到的TypeError: 'type' object is not subscriptable错误,是因为Django的FormView本身不支持FormView[MyForm]这种下标式的类型参数传递语法。正确的做法分两种场景:

1. 常规运行时使用

直接在自定义视图类中设置form_class类属性,指定你的表单类MyForm即可,这是Django官方推荐的用法:

from django.views.generic.edit import FormView
from .forms import MyForm

class MyView(FormView):
    # 指定要使用的表单类
    form_class = MyForm
    # 必须设置模板路径
    template_name = 'your_template.html'
    # 表单验证成功后的跳转地址
    success_url = '/success/'

    def form_valid(self, form):
        # 自定义表单验证通过后的逻辑
        # 比如保存表单数据
        form.save()
        return super().form_valid(form)

2. 类型注解(静态检查用)

如果是为了让类型检查工具(如mypy)识别表单的具体类型,可以借助Django的GenericFormView结合类型变量实现:

from django.views.generic.edit import GenericFormView
from django.forms import Form
from typing import TypeVar, Type

# 定义表单类型变量
FormType = TypeVar('FormType', bound=Form)

class MyView(GenericFormView[FormType]):
    form_class: Type[MyForm] = MyForm
    template_name = 'your_template.html'
    success_url = '/success/'

如果你的项目使用了django-stubs(Django的类型存根库),直接给FormView的form_class加上类型注解也能被类型检查工具识别,核心依然是通过form_class属性指定表单类,而非下标传参。

内容的提问来源于stack exchange,提问作者HsnVahedi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 17:51:17