不要在 Django 表单发出的 GET 请求中包含空白字段

dbn*_*dbn 3 django django-forms

在我的 Django 支持的站点上,我有一个包含多个可选字段的搜索页面。搜索页面是django形式,我的view函数是典型的:

def search(request):
    form = SearchForm(request.GET or None)
    if form.is_valid():
        return form.display_results(request)

    return render(request, 'search.html', {'form': form})
Run Code Online (Sandbox Code Playgroud)

Form.display_results() 使用提供的字段来查询数据库并呈现响应。我的 search.html 包括:

<form action="/search/" method="get">{% csrf_token %}
    <!-- Render the form fields -->
    <input type="submit" value="Search" />
    <input type="reset" value="Reset form" />
</form>
Run Code Online (Sandbox Code Playgroud)

由于大多数搜索都会有几个空白字段,我不想将它们包含在 search.html 上的提交按钮发出的 GET 请求中。当前搜索类似于:

http://mysite/search/?csrfmiddlewaretoken=blah&optional_field1=&optional_field2=&optional_field3=oohIWantThisOne
Run Code Online (Sandbox Code Playgroud)

我希望它们看起来像:

http://mysite/search/?csrfmiddlewaretoken=blah&optional_field3=oohIWantThisOne
Run Code Online (Sandbox Code Playgroud)

当然,我还有几个领域。这会很好,因为它会使搜索 URL 更容易被人类解析和共享。

Rob*_*b L 5

您可以将 jQuery 与按钮触发器一起使用。提供表单并提交按钮 ID。

$("#button_id").click(function(){
    $("input").each(function(){
        if($(this).val() == '') {
            $(this).remove();
        }
    });
    $("#form_id").submit();
});
Run Code Online (Sandbox Code Playgroud)

那(或类似的东西)应该在提交之前删除所有空字段。