2016-09-04 41 views
-1

私はユーザーにデータを表示していると言いますが、GETフォームを使用してデータベースの数値フィールドで何らかのフィルタリングを実行できるようにします私はこのGETリクエストパラメータを数値に変換する

code = request.GET.get('code') 
condition = {} 
if(code is not None and int(code) > 0): 
    condition['code'] = int(code) 

Somemodel.objects.filter(**condition) 

のようなものを持っていますが、これは私のコードは、私はこのエラーが出るそうでない場合は番号が含まれている場合にのみ機能します

invalid literal for int() with base 10: '' 

ので、この問題を処理するためのニシキヘビの方法は何ですか? try/exceptブロックを使用する必要がありますか?他のフィルタを追加する可能性があることを考慮して、ifステートメントを処理することをお勧めします。

+0

http://stackoverflow.com/q/1265665/1005215 –

+1

ここで 'request.GET'を処理するためにDjangoの組み込みフォーム/検証を使用していない理由はありますか? –

答えて

1

isnumericがチェックできるお役に立てば幸いですintを鋳造し、またcodeが正であることを確認することができる(整数に変換するとき)、したがってint(code) > 0を置換:

if code is not None and code.isnumeric(): 
    condition['code'] = int(code) 
+1

isnumeric()にはUnicode文字列が必要ですか?私はAttributeErrorを "22"にしていますが、U "22"ではうまく動作しています。 –

+0

よろしくお願いいたします。私はそれを試していた2.x –

+0

@SunilLullaそのPython 3.xタグでは、これはすべての文字列(デフォルトではUnicode)で動作するはずです。 Python 2では、 'isdigit'を使うことができます。 Python 2.xの –

0

int()は数値の値を期待しているためフォーム文字列に入れることができますが、 "22"、 "33"などが有効です。

あなたのケースでは空を渡しているので、エラーが発生します。あなたはタイプを()を使用して所望の出力を達成することができ、それは数

の種類を確認するに役立ちますので、変更したコードは

code = request.GET.get('code') 
    condition = {} 
    if(code is not None and type(code) == int): 
      condition['code'] = int(code) 

    Somemodel.objects.filter(**condition) 

それはcode場合:)

+0

'type(code)'はその段階で 'int'型になることはありません...常に空でもよいし、そうでなければ有効な文字列でもよい... –

+0

上記のチェックの後に他の小切手をチェックして数値フィールドなどを確認して、あなたの条件を詳しく教えてください。 –

1

1つ以上のIntegerFieldを持つDjangoフォームを使用する必要があります。彼らはあなたのためにこの変換を行い、あなたはcleaned_dataから結果を得ることができます。

関連する問題