我有一个表单,允许用户选择几个参数,以允许分面查询数据 . 由于此处没有数据输入,我希望表单发布到GET,我有另一个视图,其中有一个显示结果的不同模板 .
我希望表单正常验证,以便在未完成必填字段时显示相应的错误 . 目前我的流程看起来像这样(简化):
我的搜索视图:
def search(request):
...
context['form'] = GraphForm()
...
return render(request, 'search.html', context)
我的结果观点:
def results(request):
if 'submit' in request.GET:
# process GET variables as query
...
return render(request, 'results.html', context)
我的 search.html 模板:
<form action="{% url results %}" method="get">{% csrf_token %}
{% for field in form %}
<div class="field_wrapper">
{{ field.errors }}
{{ field.label_tag }} {{ field }}
</div>
{% endfor %}
<input type="submit" name="submit" value="Query" />
</form>
鉴于表单提交给具有单独视图代码的另一个URL,验证(突出显示错误)以及确保我拥有GET数据的最佳方法是什么?
任何帮助非常感谢 .
3 回答
这可能有点晚了,但我认为以下内容可以在保持与“POST”工作流程的相似性的同时起作用:
只需拥有一个视图,而不是有两个不同的视图来搜索和显示结果 . 然后可以遵循为帖子表格描述的normal codepath . 我们使用
'submit' in request.GET
而不是使用request.method == 'POST'
来检测表单提交 . 如果使用javascript提交表单,请确保'submit'包含在GET数据中或使用隐藏字段来检测表单提交 .views.py
search.html
您应该能够像
request.POST
一样将request.GET
传递给表单 . 表单只接受data
字典 . 它并不关心它来自哪里 . 你已经试过了吗?使用JavaScript / jQuery进行表单验证 . 您需要做的就是为
form
添加一个id,并在相应的Javascript中执行类似的操作或者使用jQuery
其中
checkForm()
在成功验证后返回true,否则返回false . (请注意,如果您不返回false,表单提交将照常继续 . )您检查/验证哪些字段也可以使用Django的模板进行更改 .