2017-01-24 5 views
0

私はいくつかのソートを行いたいと思いますが、このような順序付けという名前のパラメータでGETリクエストを行っています。これは、次のような並べ替えに使用するモデル属性です。DjangoリクエストGETパラメータ値リスト

?order=['-age', 'height'] 

注文パラメータを受け取ろうとすると問題が発生します。値はリストです。

私はこのようなASTを使用してみました:

if 'order' in request.GET: 
     import ast 
     order = ast.literal_eval(request.GET.get('order')) 
     queryset = queryset.order_by(*order) 

それは働きました。しかし、私はastライブラリを使用しないようにしたいと思います。

UPDATE

私でした。このように私のパラメータ:?

順= -age、高さ

そして、ちょうどこのようにpythonでスプリットを使用:

if 'order' in request.GET: 
    order = request.GET.get('order').split(',') 
    queryset = queryset.order_by(*order) 
+2

'.GET.getlist'を意味しますか? – Sayse

+3

[同じDjangoリクエストを扱う]と同じパラメータ名に対して複数の変数が重複する可能性があります(http://stackoverflow.com/questions/3910165/handling-django-request-get-and-multiple-variables-for-the-同じパラメータ名) – Sayse

+0

@Sayse、これはgetl​​istを使用したときの出力です。[u '[ - bet_amount、settlement_amount []] –

答えて

1

ジャンゴリクエストで複数のGETパラメータを送ることができますが、送信する方法は間違っています(Djangoだけでなく)。
あなたの要求は、キー「順序」はGETパラメータである場合ならば.getlist()は空のリストを返すようそして、あなたがorder_list = request.GET.getlist('order')

を行うことができますビューであなたがチェックする必要はありませんフォーム?order=-age&order=height
にする必要がありますキーが見つからない場合...

リストの最初の項目のみを使用する場合は、request.GET.get('order')を使用して、キーが存在しない場合はNoneを返します。

決勝コード:

order_list = request.GET.getlist('order') 
queryset = queryset.order_by(*order_list) 

PS Djangoはパラメータは自由に名前を付けることがGETできますが、PHPは(と私は他のWeb言語を考える)リストのパラメータはPARAM [](順序例として指名することがGET必要[])、したがってJQueryのようなライブラリでは、AJAXリクエストの名前をそのように指定します。 この場合、正しい名前を使用する必要があります。request.GET.getlist('order[]')

+0

説明をありがとう!非常に感謝しています! –

関連する問題