質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

848閲覧

python django GETでの検索について

退会済みユーザー

退会済みユーザー

総合スコア0

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/01/30 04:35

わからないこと

djangoでGETパラメーターで検索を実装したいのですが、GETパラメーターが空でもURLにキーだけ付与されてしまう。

やりたいこと

色々な条件で検索をしたい

# テンプレート側から検索したいGETパラメーターを渡す <form class="form_area" action="{% url 'users:index' %}" method="get"> <div class="check_box form-inline"> <label class="checkbox-inline"> <input type="radio" name="sex" value="1">男性</label> <label class="checkbox-inline">             <input type="radio" name="sex" value="2">女性</label> </div> <select name="age" class="SlectBox"> <option disabled="disabled" selected="selected">年齢</option> <option value="20">20</option> <option value="25">25</option> <option value="30">30</option> </select> <div class="fg form-inline"> <label class="sr-only">名前</label> <input type="text" name="name" class="form-control" placeholder="名前"> <label class="sr-only">電話番号</label> <input type="text" name="tel" class="form-control" placeholder="電話番号"> <button type="submit" class="search_btn btn-outline-dark mb-2"> <i class="sub-icon fas fa-search"></i>検索</button> </div> </form>

このようなフィールドがあった場合、
input type="radio"select は選択しなければキーがURLに付与されないのですが、
input type="text" は空のまま検索ボタンを押すとURLにキーが付与されてしまう。

# name と tel を空で送った場合 # このようにキーだけが付与されている http://127.0.0.1:8000/?name=&tel=

これを、パラメーターが空の場合、キーをURLに付与したくないのですが、どうすれば良いのでしょうか?

お分かりのかたおられましたら、ご教示願います。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

t_obara

2020/01/30 05:04

空になるとどのような問題が起こるから回避したいとお考えですか?
退会済みユーザー

退会済みユーザー

2020/01/30 23:28 編集

t_obara 様 失礼致しました。 空だと検索の際うまくいかない、と言うことになります。 例↓ ``` # Users テーブルに age=25 と name=太郎 のデータがあった場合 # ここでGETの値を取得 # name が空で渡ってきた場合、None が代入される age = request.GET.get('age') # age に 25 が入ったと想定 name = request.GET.get('name') # name に None が入ったと想定 # ここで Users テーブルから検索 results = Users.objects.filter(age = age, name__icontains = name, status = 1).order_by('-created_at') ``` このようにした場合、age=25 の検索結果が出て欲しいのですが、name=None の為、age=25 のデータが引っかからないようになってしまいます。 なので name=None なら検索条件から除外する などの処理をしたいのですが、どうすれば良いかわからず・・・ になります。 お分かりであれば、ご教示お願い致します。
t_obara

2020/01/31 00:33

それだけならば、name=Noneの場合にサーバー側で検索条件からnameを除外すれば良いと思います。その状況で検索してはいけないということであれば、Javascriptを利用してチェックすれば良いですが。
NatsuToku

2020/01/31 03:57

filterには辞書が渡せるのでこんな感じでいける気がします ``` sort_params = { 'status' : 1, } if request.GET.get('age’): sort_params['age'] = request.GET.get('age')  if request.GET.get('name’): sort_params['name__icontains'] = request.GET.get('name')  results = Users.objects.filter(**sort_params).order_by('-created_at') ``` 参考 https://stackoverflow.com/questions/16018497/django-filter-model-by-dictionary
退会済みユーザー

退会済みユーザー

2020/01/31 13:09

natsu toku 様 おお、まさにやりたかったことが出来ました。。! ありがとうございます!!
退会済みユーザー

退会済みユーザー

2020/01/31 13:10

t_obara 様 ご回答ありがとうございます!!!
guest

回答1

0

当方,django でちょっとしたアプリを作った事がある程度の人です.わたしの理解では,貴方の質問は django に関する質問ではなく,html に関するものだと思います.

わたしが思いつく解決策は以下です.

1.Javascript で submit 時に name と tel の値をチェックして,入力がなければ input タグを disabled にする事で,ブラウザが空のパラメータを送らなくなる(と思う).

2.ブラウザが空のパラメーターを送る事は許容する.空のパラメータを無視するように view.py で対応する

投稿2020/02/07 14:36

pied_piper

総合スコア38

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問