前提・実現したいこと
プログラミング全般的に初心者で、Pythonを勉強し始めて1か月くらいのぺーぺーです。
Djangoでウェブアプリケーションを試しに作っていて、内容はSQLServerに格納されたデータをHTMLで表示させるものです。
データベースからデータの取得、表示、1項目だけ検索までは行けました。
が、4つあるフォームの中でどれか一つだけ入力されてたら、その項目のSQL文を実行させるというif文がうまく動かなくて躓いています。
最初の表示は下のelseまで行って表示、ごはんの項目を入力するときちんと抽出して表示されるんですが、おかず以降の項目を入力しても最初のif文の処理が通ってしまい、きちんと抽出されません。
該当のソースコード
views.py(一部) def order(request): ggohan = request.GET.get('gohan') ookazu = request.GET.get('okazu') jjuice = request.GET.get('juice') dday = request.GET.get('day') if ggohan is not None: #ごはん検索 sql = "SELECT ごはん, おかず, のみもの, 日付 FROM メニュー表 WHERE ごはん LIKE " sql = sql + "'%" + ggohan + "%'" elif ookazu is not None: #おかず検索 sql = "SELECT ごはん, おかず, のみもの, 日付 FROM メニュー表 WHERE おかず LIKE " sql = sql + "'%" + ookazu + "%'" elif jjuice is not None: # のみもの検索 sql = "SELECT ごはん, おかず, のみもの, 日付 FROM メニュー表 WHERE のみもの LIKE " sql = sql + "'" + jjuice + "%'" elif dday is not None: #日付検索 sql = "SELECT ごはん, おかず, のみもの, 日付 FROM メニュー表 WHERE 日付 LIKE " sql = sql + "'%" + dday + "%'" else: #全て未入力で全件表示 sql = "SELECT ごはん, おかず, のみもの, 日付 FROM メニュー表 ORDER BY 日付 DESC" posts = DB.DBConnect(sql) return render( request, "menu/bangohan.html", { 'title' : "メニュー表", 'posts' : posts, }, )
bangohan.html {% extends "menu/layout.html" %} {% block content %} <FORM name="form1" method="get"> {% csrf_token %} <h3>メニュー検索</h3> <table> <tr> <td width=80 >ごはん</td> <td width=200><input type="text" name="gohan" size=20 value=""></td> <td width=80 >おかず</td> <td width=200><input type="text" name="okazu" size=20 value=""></td> </tr> <tr> <td width=80 >のみもの</td> <td width=200><input type="text" name="juice" size=30 value=""></td> <td width=80 >日付</td> <td width=200><input type="text" name="day" size=30 value=""></td> </tr> <tr> <td colspan="4"> <center> <input type="submit" name="KENSAKU" value="検索"> <input type="reset" value="リセット"> </center> </td> </tr> </table> </FORM> <table> <tr> <td>ごはん</td> <td>おかず</td> <td>のみもの</td> <td>日付</td> </tr> {% for post in posts %} <tr> <td> {{ post.0 }} </td> <td> {{ post.1 }} </td> <td> {{ post.2 }} </td> <td> {{ post.3 }} </td> </tr> {% endfor %} </table> {% endblock %}
試したこと
ggohan = request.GET.get('gohan')のところでフォームが未入力でも変数に空白?が入ってif文が通ってしまうのかなーって疑っているんですが、改善案が浮かびません。。。
(and検索はまだ途上でイメージが浮かんでないので後回しにしました。)
補足情報(FW/ツールのバージョンなど)
使用環境:VisualStudio2017 Professional
使用したプロジェクト:Django Web プロジェクト
使用したブラウザ:Googlechrome
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/10/14 23:38