0

Django newbieはここにあります。私は最近、Djangoで簡単な検索を実装しました。ユーザーが検索バーにデータを指定すると、検索が実行されます。ユーザーが空の検索バーをクリックすると、検索を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

JavaScriptを使用したことがありますか?あなたがリクエストをしないようにその方法。リクエストが完了した後*フォームの検証が行われます。 –

+0

@guillermochamorroいいえまだ検討していません。私が間違ってやっていることを理解しようとすると、Django経由で可能なようです。 –

+0

リクエストが行われたため、サーバー側(django)から強制的に実行することはできません。空のリクエストを送信しないようにクライアント側から避けたいと思っています。それはjavascriptでのみ可能です。 –

答えて

0

私はそれがjavascriptでのみ可能だと言って間違っていました。

入力フォームにrequired属性を追加するのは簡単です。そのため、ブラウザは空のエラーをキャッチします。

<form> 
    <input type="search" required><!-- added the required attribute--> 
</form> 
関連する問題