在Django中创建不基于模型的表单会导致错误

时间:2013-05-07 19:48:48

标签: python django

我在Django中创建了一个表单,如下所示:

class advancedsearch(forms.Form):
    choices = forms.ChoiceField (label="choices", choices = ("1", "2", "3"), required= False)

现在我试图在视图中使用它,如下所示:

def advancedsearch(request):
    # if request.method == "POST":
    #   search = advancedsearch(request.POST, request.FILES)
    #   if search.is_valid():
    #       return HttpResponseRedirect(reverse("view.designs")) #    UPDATE REDIRECT
    #   else:
    #       print "FORM IS NOT VALID"
    #     # GET request
    # else:
    #   search = advancedsearch()
    #   return render_to_response("advancedsearch.html", {
    #       "search": search,
    #       }, context_instance=RequestContext(request,{}))
    # # generic case
    search = advancedsearch()
    return render_to_response("advancedsearch.html", {
        "search": search,
        }, context_instance=RequestContext(request, {}))

我得到的错误是advancedsearch() takes exactly 1 argument (0 given)

我认为我不需要向函数传递参数 - 但它看起来像我...我应该传递什么?

2 个答案:

答案 0 :(得分:1)

您为表单和视图指定了相同的名称。所以视图是递归地调用自己而没有任何东西来阻止它。

表单不需要参数,但由于视图的名称与模型相同,因此Python认为您需要调用视图,这需要参数。

您应该重命名模型或视图。

答案 1 :(得分:1)

search = advancedsearch()称为查看方法advancedsearch(),而不是表单

您可以这样做:

class AdvancedSearchForm(forms.Form):
    choices = forms.ChoiceField (label="choices", choices = ((1, 1),(2, 2),(2, 3)), required= False)

并在视图中:

search = AdvancedSearchForm()

这应该可以解决您的问题。