【问题标题】:Django forms: how do I display the initial blank form?Django 表单:如何显示初始的空白表单?
【发布时间】:2010-01-22 18:56:43
【问题描述】:

我有这个视图功能:

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 永远不会是假的吗?谢谢。

整个视图函数为here

【问题讨论】:

    标签: python django-forms


    【解决方案1】:

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

    您应该阅读:When do you use POST and when do you use GET?

    【讨论】:

      【解决方案2】:

      当您使用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__ 方法,但您不必这样做。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-01-22
        • 1970-01-01
        • 2021-12-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-02
        • 2012-02-18
        相关资源
        最近更新 更多