【发布时间】:2018-05-22 02:47:51
【问题描述】:
这里是 Django 新手。我最近用 Django 实现了一个简单的搜索。我用户在搜索栏中指定数据,执行搜索。如果用户单击空搜索栏,我今天能够确定如何使搜索为空。我真正想要完成的是实现错误逻辑,以便用户必须在搜索栏中指定数据。这对于所有其他观点来说都是非常直截了当的,但无论如何搜索对我来说有点棘手。我今天做了几次 SO 搜索,并确定我的 HTML get 方法可以用于搜索,但它可能会导致我正在使用的 FORMVIEW 出现一些问题。我还尝试为 FORMVIEW 覆盖 POST 和 GET,但似乎无法使其正常工作。我想坚持使用基于类的视图,所以我使用的是 FORMVIEW。这是我的代码....
我的 HTML
<form method="GET" autocomplete=off action="{% url 'Book:book_request_search_results' %}" >
<div>
<h1 class="title">Book Request Search</h1>
</div>
{{ form.non_field.errors }}
<div class="section">
<input type="search" class="name2" name="q">
</div>
<div class="section">
<input type="submit" id="" class="submit6" value="Search">
</div>
我的观点.PY
class BookRequestSearchView(LoginRequiredMixin,FormView):
form_class = BookRequestSearch
template_name = 'store/Book_request_search.html'
success_url = reverse_lazy('store:book_request_search_results')
def form_valid(self, form):
self.kwargs['q'] = form.cleaned_data['q']
if self.request.GET.get('q'):
pass
else:
raise forms.ValidationError("Enter data")
return super(BookRequestSearchView, self).form_valid(form)
我的表格.PY
class BookRequestSearch(forms.Form):
q = forms.CharField(required=True)
def __init__(self, *args, **kwargs):
super(BookRequestSearch, self).__init__(*args, **kwargs)
我也尝试在我的表单中添加一个干净的方法,但这似乎也不起作用......
def clean(self):
search = self.initial['q']
if search:
pass
else:
raise forms.ValidationError("Enter data")
return self.cleaned_data
我下午的大部分时间都在扫描,似乎找不到在 FORMVIEW 上触发验证以触发搜索栏上的错误的方法。任何帮助,将不胜感激。我看过许多不同的 FORMVIEW 文章,但没有一篇文章能帮助我理解我做错了什么以及为什么这不起作用。代码现在的方式,它可以工作,但它不会阻止用户点击搜索然后触发基本上是一个空查询。我试图通过强制用户在没有条件的情况下进行搜索时将某些内容放入框中来防止这种情况发生。提前感谢您的任何指导。
【问题讨论】:
-
你考虑过使用javascript吗?这样你就不会提出请求。表单验证将在 请求完成后进行。
-
@guillermochamorro 不,我还没有考虑过。似乎可以通过 Django,只是想了解我做错了什么。
-
你不能从服务器端(django)强制,因为请求已经完成。我了解您希望避免从客户端不发送空请求。这只能通过 javascript 实现。
-
这里有一个库可以从客户端验证formvalidator.net
-
不,我还没有开始将 javascript 整合到我的代码中。
标签: django python-3.x django-forms django-templates django-views