Django 表单抛出错误:“需要 1 个参数(给定 0 个)”

0 投票
6 回答
5722 浏览
提问于 2025-04-16 00:21

我正在做一个基本的事件表单,这个表单是从一个模型创建的,但我总是收到以下错误信息:

TypeError at /addlaundry/
addlaundry() takes exactly 1 argument (0 given)

我觉得可能是因为我没有在视图中正确传递参数,但我找不到任何文档来告诉我该怎么做,至少没有我能理解的那种。

这是我的 urls.py 文件:

urlpatterns = patterns('',
    url('^addlaundry/$', 'beacon.laundry.views.addlaundry'),
}

这是我的视图代码:

# Create your views here.

from schedule.views import EventForm

def addlaundry(request):
    if request.method == 'POST':
        form = EventForm(request.POST)
        if form.is_valid():
            return HttpResponseRedirect('/thanks/') #redirect after succesfully adding new delivery
    else:
     form = addlaundry()

    return render_to_response('newlaundry.html', {
        'form': form,
    })

我是不是把视图结构搞错了,还是说我漏掉了什么其他的东西?如果有我需要阅读的文档,我想看看,只是我还没找到,感觉自己好像漏掉了一些基本的东西。

谢谢,

迈克尔

6 个回答

1

另外,在urls.py文件中,你的视图函数不应该用字符串表示。

1

views.py :

from schedule.forms import EventForm

def addlaundry(request):
    if request.method == 'POST':
        form = EventForm(request.POST)
        if form.is_valid():
            return HttpResponseRedirect('/thanks/')
    else:
        form = EventForm()

    return render_to_response('newlaundry.html', {
        'form': form,
    })

这意味着:

  • 使用一个叫做 forms.py 的文件来定义你的表单
  • 在没有提交表单的情况下(也就是普通的第一次加载页面),初始化你的表单,然后把它传递给你的模板
3

问题出在这里:

form = addlaundry()

你在调用你的视图函数 addlaundry,这个函数需要一个必填的参数(request),但是你没有给它传任何参数。

当然,这样构建表单也不是正确的方法。你应该看看 Django 表单文档 中的例子,了解如何在 Django 中创建和使用表单。

撰写回答