代码之家  ›  专栏  ›  技术社区  ›  Michael Morisy

Django窗体正在引发错误:“只接受1个参数(给定0个参数)”。

  •  0
  • Michael Morisy  · 技术社区  · 16 年前

    我正在处理从模型创建的基本事件窗体,但我一直收到以下错误消息:

    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 回复  |  直到 16 年前
        1
  •  3
  •   mipadi    16 年前

    问题在于:

    form = addlaundry()
    

    您正在调用视图函数 addlaundry 需要1个参数( request 但是你不能给它任何论据。

    当然,无论如何,这不是构造窗体的正确方法。您将要查看 Django forms documentation 了解如何在Django中创建和使用表单。

        2
  •  1
  •   Ignacio Vazquez-Abrams    16 年前

    你的观点被称为 addlaundry 它还调用了(大概)另一个调用 洗衣房 . 重命名其中一个,或使用另一个 洗衣房 从其命名空间内部。

        3
  •  1
  •   Daniel Roseman    16 年前

    这是你的问题:

     form = addlaundry()
    

    这是试图调用视图本身!这不是你想要的。您需要定义一个表单类并在这里调用(实例化)它。

        4
  •  1
  •   vinyll    16 年前

    查看:

    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文件定义表单
    • 在非发布上下文(常规的第一页加载)中初始化表单,该上下文将传递给模板
        5
  •  1
  •   Steve    16 年前

    此外,在urls.py中,您的视图不应该是字符串。

        6
  •  -1
  •   AndiDog    16 年前
    else:
     form = addlaundry()
    

    正如异常所说:视图函数需要1个参数,但您没有提供任何参数。