0

장고 초보자는 여기에 있습니다. 나는 최근에 장고로 간단한 검색을 구현했다. 사용자가 검색 창에 데이터를 지정하면 검색이 실행됩니다. 사용자가 빈 검색 창을 클릭하면 검색 결과를 null로 만드는 방법을 결정할 수있었습니다. 내가 실제로 이루고자하는 것은 오류 로직을 구현하여 사용자가 검색 창에 데이터를 지정해야한다는 것입니다. 이것은 다른 모든 견해들과 함께 아주 솔직하게 진행되었지만, 어쨌든 저를 위해서 검색은 좀 더 까다 롭습니다. 나는 오늘 여러 가지 SO 검색을했고, 나의 HTML get 메쏘드가 검색을 위해 괜찮다고 결정했다. 그러나 그것은 내가 사용하고있는 FORMVIEW에 몇 가지 문제를 야기 할 수있다. POST 및 GET FORMVIEW에 대한 재정의를 시도했지만 작동하도록 할 수 없습니다. 나는 CLASS BASED VIEWS를 고수하고 싶기 때문에 FORMVIEW를 사용하고있다. 여기에 내 코드 ....Django 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 기사를 보았지만 그 중 누구도 내가 잘못하고있는 것이 무엇이며 왜 작동하지 않는지 이해하는 데 도움이되지 못했습니다. 이제 코드가 작동하는 방식으로 작동하지만 사용자가 검색을 클릭 한 다음 본질적으로 빈 쿼리를 트리거하는 것을 방지하지는 못합니다. 나는 그들이 조건없이 검색하려고하면 상자에 무언가를 넣어 사용자가 강제로 그것을 방지하기 위해 노력하고있어. 모든 방향에 대해 미리 감사드립니다.

+0

자바 스크립트를 사용 해본 적 있으십니까? 그런 식으로 요청하지 마십시오. 요청이 완료되면 * 양식 유효성 검사가 수행됩니다. –

+0

@guillermochamorro 아니요 아직까지 고려하지 않았습니다. 장고를 통해 가능할 것 같아서 내가 잘못하고있는 것을 이해하려고 노력합니다. –

+0

요청이 완료되었으므로 서버 측 (django)에서 강제로 실행할 수 없습니다. 빈 요청을 보내지 않도록 클라이언트 쪽에서 피하기를 원한다는 것을 이해합니다. 자바 스크립트에서만 가능합니다. –

답변

0

자바 스크립트에서만 가능하다는 말은 잘못되었습니다.

입력 양식에 required 속성을 추가하는 것만 큼 간단하므로 브라우저가 빈 오류를 포착합니다.

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