繁体   English   中英

Django表单:如何显示初始空白表单?

[英]Django forms: how do I display the initial blank form?

我有这个查看功能:

def search(request):
    if request.method == 'GET':
        form = SearchForm(request.GET)
        if form.is_valid():
            last_name = form.cleaned_data['last_name']
            first_name = form.cleaned_data['first_name']
            lawyers = Lawyer.objects.all()
            [ other if statements ]
            ....
    else:
        form = SearchForm()
        return render_to_response('search.html', {'form': form})

我认为,当页面加载时, else语句将以初始空白表格执行。 但这种情况并非如此。 要最初显示该表单,我必须在第一个if内添加它:

def search(request):
    if request.method == 'GET':
        form = SearchForm(request.GET)
        if form.is_valid():
            last_name = form.cleaned_data['last_name']
            first_name = form.cleaned_data['first_name']
            lawyers = Lawyer.objects.all()
            [ other if statements ]
            ....
        form = SearchForm()
        return render_to_response('search.html', {'form': form})
    else:
        form = SearchForm()
        return render_to_response('search.html', {'form': form})

您能帮忙为什么第一个if永远不会为假吗? 谢谢。

整个视图功能在这里

每个普通的HTTP请求(例如,当您访问http://stackoverflow.com时 )都是GET请求。 通常,在表单更改某些数据时,最好使用POST作为表单的方法。

您应该阅读: 什么时候使用POST以及什么时候使用GET?

当您使用method=GET发布表单时,实际上并没有更改初始请求中的method=GET :它也是method=GET

您可以在表单中使用method=POST ,然后if语句将对此进行检查,或者您可以根据表单要求检查是否存在必填字段first_namelast_name或两者。

if 'first_name' in request.GET or 'last_name' in request.GET:
    form = SearchForm(request.GET)
else:
    form = SearchForm()

您可能希望将其抽象为表单本身,修改__init__方法,但不必这样做。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM