2017-08-17 13 views
0

私は2つのドロップダウンメニューを持っており、それらの値を変数として使用して、取得したデータを内部Web APIからフィルタリングするためにその値を取得したいと考えています。場合は、しかし、私は何年以外のデータを保持していないと私は週の数を生成していますので、私はDjangoのフォームを使用していませんでしたDjangoのドロップダウンメニューの内容を読むには?

Dropdown menus

Views.py

# I want to retrieve the year and week number, so I can use them as values in my filter 
def filter(): 
    filters = {"filter": { 
     "filters": [{ 
      "field": "DateTime", 
      "operator": "gte", 
      "value": "2017-07-23 23:59:59" 
     }, { 
      "field": "DateTime", 
      "operator": "lte", 
      "value": "2017-08-18 23:59:59" 
     }], 
     "logic": "and" 
    }} 

Djangoフォームを使用してデータ処理を容易にし、視点を書くことが有用であると考えているので、私はこのWebアプリケーションをより良くしたいと思っています。

header.html

<form method="POST"> {% csrf_token %} 
    <h6>Select year</h6> 
    <select name="select_year"> 
     <option value = "2016" >2016</option> 
     <option value = "2017"> 2017</option> 
     <option value = "2018"> 2018</option> 
    </select> 
     <h6>Select week</h6> 
     <select name="select_week"> 
     <!--range is not supported: the spaces represent the number of weeks --> 
    {% for week in "             " %} 
     <option value="{{forloop.counter}}">{{forloop.counter}}</option> 
    {% endfor %} 
    </select> 
    <button type="submit">Search</button> 
</form> 

警告:それは適切なソリューションではありませんので、私は週番号を生成するためのコードが完全に間違っていることを懸念していると私は、次の記事Numeric loops in Django templatesを読んだことが、 Iterate number in for loopsしかし、これはトピックから外れており、私の優先事項はこれらの2つのドロップダウンメニューの値を取得することです。

答えて

2

ソリューション

def your_view(request): 
    if request.method == 'POST': 
     year = request.POST.get('select_year', None) 
     week = request.POST.get('select_week', None) 

     # rest of the code 

your_viewメソッドによって処理されたHTMLテンプレートとDjangoでそれのためのurlpatternform、にアクションを追加します。
requestオブジェクトは、POST辞書にデータを格納し、キーはhtmlタグnamesに基づいています。

これらの値をfilterメソッドに渡して、必要に応じてフィルタの書式を設定できます。

注:Django Formsを使用する方が、HTMLコードの書き込みが節約され、値も消毒されるため、おそらく良いでしょう。

参考:https://docs.djangoproject.com/en/dev/ref/request-response/#django.http.HttpRequest.POST

+0

今、この中での作業が、私は私の既存のコードにいくつかの変更を行う必要があります。私はDjangoフォームを実装しようとします。なぜなら、値のサニタイズに関するあなたのコメントに同意するからです。 –

+0

あなたの問題を解決した場合は、その答えを受け入れてください。 –

+0

私は実装で作業していますが、私はDjangoフォームを実装する必要があるため、コードの一部を変更する必要があります。私がそれを実装するとすぐに答えを受け入れるだろう。 –

関連する問題