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

如何在Django单元测试中向表单传递request对象

Django单元测试中向表单传递request对象的正确方式

你的问题出在传递request的方式错误:你把request放到了表单的data参数里,但你的表单是从初始化的kwargs中提取request的,所以找不到对应键引发KeyError。

错误原因

你的表单__init__方法通过kwargs.pop("request")获取request,这意味着需要在实例化表单时,把request作为独立的关键字参数传入,而不是塞进data字典里。

修正后的测试代码

def test_AddPairedStudyForm(self):
    self.client.force_login(self.user)
    request = RequestFactory().get(reverse("researcher_ui:console"))
    request.user = self.user

    study_group = 'StudyGroup'
    payload = {
        "study_group": study_group,
        "paired_studies": [self.study.id, self.study1.id],
    }
    # 把request作为单独的关键字参数传给表单,而非放在data里
    form = AddPairedStudyForm(data=payload, request=request)
    self.assertTrue(form.is_valid())

原理说明

在CBV的get_form_kwargs里,你是把request添加到表单的初始化kwargs中,单元测试里需要模拟这个逻辑:

  • 表单的data参数负责传递表单字段的提交数据
  • request作为表单初始化的额外参数,需要单独以关键字参数的形式传入,这样才能被__init__里的kwargs.pop("request")正确获取

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 21:12:36