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

为何Django代码无法将表单提交的task追加至tasks列表?

解决Django表单无法追加任务到列表的问题

你的代码里有两个大小写敏感的错误,这是导致表单提交后任务无法追加的直接原因:

  1. 请求方法判断错误:Django中request.method返回的是大写的HTTP方法字符串,你写的request.method == "post"永远不会成立,应该改成request.method == "POST"。
  2. 表单数据获取错误:获取POST提交的数据应该用request.POST(大写POST),而不是request.post,这是Django HttpRequest对象的内置属性,大小写不能错。

另外要注意:全局变量tasks只能在开发测试时临时使用,实际生产环境中绝对不能这么做——Django是多进程/多线程架构,全局变量的状态不会在不同请求间保留,而且多个用户会共享这个列表,数据会混乱。正确的做法是用Django的ORM创建数据库模型来存储任务。

修正后的核心代码

def add(request):
    if request.method == "POST":  # 修正为大写POST
        form = NewTaskForm(request.POST)  # 修正为request.POST
        if form.is_valid():
            task = form.cleaned_data["task"]
            tasks.append(task)
            return HttpResponseRedirect(reverse("task:index"))
        else:
            return render(request, "task/add.html", {
                "form": form
            })
    return render(request, "task/add.html",{
        "form": NewTaskForm()
    })

正式环境的最佳实践(用数据库存储任务)

如果要做正式的任务管理功能,建议先创建Task模型:

# 在app的models.py中
from django.db import models

class Task(models.Model):
    content = models.CharField(max_length=200)
    created_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.content

然后修改视图代码,用ORM操作数据库:

from .models import Task

def add(request):
    if request.method == "POST":
        form = NewTaskForm(request.POST)
        if form.is_valid():
            task_content = form.cleaned_data["task"]
            Task.objects.create(content=task_content)  # 存入数据库
            return HttpResponseRedirect(reverse("task:index"))
        # 其他代码不变

def index(request):
    tasks = Task.objects.all()  # 从数据库获取所有任务
    return render(request, "task/index.html", {"tasks": tasks})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 14:42:57