首页 > 解决方案 > Django 表单无效:此字段是必需的

问题描述

我不断收到表单无效的错误。在我看来,我有一些打印语句,它们表明查询字段没有被提交——我在这篇文章的底部包含了一些输出。为什么查询不提交?是因为我使用 GET 提交表单吗?

这是我的forms.py:

from django import forms

class SearchForm(forms.Form):
    query = forms.CharField(label='Search', max_length=200)

视图.py:

from django.shortcuts import render
from django.http import HttpResponse
from . import pull
from .forms import SearchForm

def search(request):
    if request.method == "GET":
        form = SearchForm(request.GET)
        print(request.GET)
        print(form)
        if form.is_valid():
            query = form.cleaned_data['query']
            print(query)
            results = pull.main(query)
            print(results)
            return render(request, 'book_search/results_copy.html', {'form': form, 'results': results})
        else:
            print("invalid")
            form = SearchForm()
            return render(request, 'book_search/results_copy.html', {'form': form})
    else:
        return HttpResponse("Invalid request type")

results_copy.html:

<html>

<head>
</head>

<body>
    <form method="GET" action="">
        {% csrf_token %}
        <input type="text" value="">
        <button type="submit">Search</button>
    </form>
    <p>Text after form</p>

    {{ results|safe }}
    <table>
        {% for row in results %}
        New table row
        <tr>
            {% for value in row %}
            <td>{{ value.0 }}</td>
            {% endfor %}
        </tr>
        {% endfor %}
    </table>

</body>

</html>

一些输出行:

[07/Feb/2020 02:55:17] "GET /search/?csrfmiddlewaretoken=RKdAkUxI7ax4Z2Nw05FSUySADe9KAlqMijBeVsHv6uRuPy3DfS6UUnlNXoj6E8mM HTTP/1.1" 200 374
<QueryDict: {}>
<tr><th><label for="id_query">Search:</label></th><td><ul class="errorlist"><li>This field is required.</li></ul><input type="text" name="query" maxlength="200" required id="id_query"></td></tr>
invalid
[07/Feb/2020 02:55:19] "GET /search/ HTTP/1.1" 200 374
<QueryDict: {'csrfmiddlewaretoken': ['YjGmS7b8zWYZ4HyIrI11zrdxv6PPeR0npS40tFlVygipUdOPGvs3zgGKPgZbiEWn']}>
<tr><th><label for="id_query">Search:</label></th><td><ul class="errorlist"><li>This field is required.</li></ul><input type="text" name="query" maxlength="200" required id="id_query"></td></tr>
invalid

标签: django

解决方案


推荐阅读