Django Formview无法验证

时间:2017-12-07 21:55:36

标签: django python-3.x django-forms django-templates django-views

Django新手在这里。我最近用Django实现了一个简单的搜索。我用户在搜索栏中指定数据,执行搜索。如果用户点击空搜索栏,我今天能够确定如何使搜索为null。我真正想要实现的是实现错误逻辑,以便用户必须在搜索栏中指定数据。所有其他观点都非常直接,但无论如何,搜索对我来说有点棘手。我今天做了几次SO搜索,并确定我的HTML get方法适合搜索,但它可能会导致我正在使用的FORMVIEW出现一些问题。我还试图覆盖FORMVIEW的POST和GET,但似乎无法让它工作。我想坚持使用CLASS BASED VIEWS,所以我使用的是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>

我的VIEWS.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)

我的FORMS.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文章,但是没有一篇能帮助我理解我做错了什么以及为什么这不起作用。代码现在的方式,它的工作原理,但它不会阻止用户点击搜索,然后基本上触发一个空查询。我试图通过强迫用户在没有标准的情况下进行搜索时将某些内容放入框中来防止这种情况。提前感谢任何方向。

1 个答案:

答案 0 :(得分:1)

我说错误只能用javascript说错了。

required属性添加到输入表单非常简单,因此浏览器会捕获空错误。

<form>
    <input type="search" required><!-- added the required attribute-->
</form>