在Django中创建表单不基于模型原因

2024-10-01 02:24:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我用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)

我不认为我需要向函数传递一个参数——但是看起来我需要……我应该传递什么呢


Tags: toinstancesearchreturnifresponserequesthtml
2条回答

您为窗体和视图指定了相同的名称。所以视图递归地调用自己,没有任何东西可以阻止它

表单不需要参数,但是由于视图与模型同名,Python认为您需要调用视图,而视图需要参数

您应该重命名模型或视图

search = advancedsearch()被称为视图方法advancedsearch(),而不是表单

你可以这样做:

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

在视图中:

search = AdvancedSearchForm()

这会解决你的问题

相关问题 更多 >