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

Django中如何将GET请求携带的用户数据回填到表单中?

问题根源

你出现KeyError和回填失效的问题有两个核心错误:

  1. 你重写表单__init__方法时,强行从kwargs中弹出departure_airport和arrival_airport两个键,但你实例化表单时是把参数字典作为位置参数传入的,这部分参数不会进入kwargs,自然找不到对应键抛出KeyError。
  2. super.__init__(*args, **kwargs)的调用写法错误,正确的调用应该是super().__init__(*args, **kwargs),需要加括号实例化父类。

更重要的是:Django原生表单本身就支持传入请求参数(GET/POST都适用)自动回填字段值,你完全不需要额外重写__init__方法,属于多余操作。

解决方法

第一步:删除表单类中自定义的__init__方法

修正后的表单代码如下:

class FlightSearchForm(forms.Form):
    departure_airport = forms.CharField(max_length=100)
    arrival_airport = forms.CharField(max_length=100)

第二步:简化视图逻辑

直接把request.GET传给表单即可,Django会自动判断是否有参数,有参数就自动绑定回填,无参数就返回空表单:

def index(request):
    # request.GET为空时传入None,表单为未绑定的空状态
    form = FlightSearchForm(request.GET or None)
    return render(request, 'app1/index.html', {'form': form})

第三步:模板正常渲染表单即可

模板中正常使用表单字段渲染,比如:

<form method="get" action="">
    {{ form.as_p }}
    <button type="submit">搜索航班</button>
</form>

Django会自动把GET参数中的对应值填充到表单字段的value属性中,实现回填效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 00:15:02