我在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)
我认为我不需要向函数传递参数 - 但它看起来像我...我应该传递什么?
答案 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()
这应该可以解决您的问题。