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

Django表单报错:无法访问未赋值的局部变量'form'

问题解决方法

1. 修复视图中form变量未定义的错误

在views.py的getAbout函数中,仅当请求为POST时才创建form对象,GET请求场景下form变量未初始化,直接引用会触发报错。需在条件判断外提前初始化表单:

修改后的views.py:

from django.shortcuts import render
from routes_form.forms import RouteForm


def getAbout(request):
    form = RouteForm()  # 初始化表单,处理GET请求
    if request.method == 'POST':
        form = RouteForm(request.POST)
        if form.is_valid():
            form.save()
            # 可选:添加重定向避免重复提交
            # from django.shortcuts import redirect
            # return redirect('getAbout')
    return render(request, 'routes_form/form_page.html', {'form': form})

2. 修复Cities模型的__str__方法错误

models.py中Cities类的__str__方法返回self.state,但模型未定义state字段,后续调用该方法会触发属性错误,需改为返回已定义的city字段:

修改后的models.py中Cities部分:

class Cities(models.Model):
    city = models.CharField(max_length=100)

    def __str__(self):
        return self.city   

3. 移除模板中多余的输入框

form.html中手动添加的<input type="text" ...>属于冗余内容,因为RouteForm已通过fields='__all__'包含了about字段,该手动输入框的数据不会被表单处理,导致提交后about字段无法获取用户输入。

修改后的form.html:

<form method="post">
    {% csrf_token %}
    <legend>
        <h2>About</h2>
    </legend>
    {{ form }}
    <input type="submit" value="Send route">
</form>

可选优化:表单提交后重定向

为避免用户刷新页面时重复提交表单,可在表单验证保存后添加重定向逻辑:

更新后的views.py:

from django.shortcuts import render, redirect
from routes_form.forms import RouteForm


def getAbout(request):
    form = RouteForm()
    if request.method == 'POST':
        form = RouteForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('getAbout')  # 重定向到当前视图,避免重复提交
    return render(request, 'routes_form/form_page.html', {'form': form})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 23:35:42