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

Django表单提交后travel_date与max_amt字段返回None问题求助

解决Django表单字段提交后返回None的问题

问题描述

开发的Django表单提交后,origin和destination字段能正常获取值,但travel_date和max_amt字段返回None。

问题原因

  1. 表单字段name属性不匹配:travel_date的widget指定了name='date',max_amt指定了name='amount',这和表单类中定义的字段名travel_date、max_amt不一致,导致提交时POST数据的键名与视图取值的键名不对应。
  2. 视图未正确使用表单实例处理数据:视图中直接从request.POST取值,且表单未正确实例化(form = GetQuery未创建实例),既没有利用Django表单的验证机制,也容易因键名不匹配导致取值失败。

解决方案

1. 修正forms.py中的字段name属性

将widget的name属性改为与表单字段名一致:

class GetQuery(forms.Form):
    origin = forms.CharField(max_length=30, widget=forms.TextInput(
        attrs={'type': 'text', 'id': 'org', 'name': 'origin', 'placeholder': 'origin code'}))
    destination = forms.CharField(max_length=30, widget=forms.TextInput(
        attrs={'type': 'text', 'id': 'dst', 'name': 'destination', 'placeholder': 'destination code'}))
    # 修改travel_date的name为字段名travel_date
    travel_date = forms.DateField(widget=forms.DateInput(attrs={'type': 'date', 'name': 'travel_date'}))
    max_amt = forms.CharField(max_length=6, widget=forms.NumberInput(
        # 修改max_amt的name为字段名max_amt
        attrs={'type': 'number', 'id': 'amt', 'name': 'max_amt', 'placeholder': 'Enter Price Range'}))

2. 修正views.py中的表单处理逻辑

正确实例化表单,并用表单处理POST数据,通过cleaned_data获取验证后的有效值:

def home(request):
    form = GetQuery()  # 初始化表单实例
    if request.method == "POST":
        form = GetQuery(request.POST)  # 将POST数据绑定到表单
        if form.is_valid():  # 验证表单数据合法性
            # 从cleaned_data中获取验证后的字段值
            origin = form.cleaned_data.get('origin')
            destination = form.cleaned_data.get('destination')
            travel_date = form.cleaned_data.get('travel_date')
            max_amt = form.cleaned_data.get('max_amt')
            print(origin, destination, travel_date, max_amt)
    IC = AC.objects.all().order_by('-pk')
    return render(request, 'index.html', context={'IC':IC, 'form': form})

说明

  • 当表单字段的name属性与类中字段名一致时,Django会自动渲染正确的表单元素name,提交后能准确绑定数据。
  • 使用form.is_valid()验证后,cleaned_data会返回符合字段类型的有效值(比如travel_date会是datetime.date对象),避免直接取request.POST可能出现的格式错误或None值问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 23:36:23