2017-01-24 2 views
0

Я хочу сделать некоторую сортировку и что у меня есть разум делает запрос GET с параметром с именем ordering вроде этого, и это значение будет атрибутом модели, который я буду использовать для сортировки следующим образом:Django request Список значений параметров 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

Я сделал параметр, как это:

заказ = -Возраст, высота

И просто использовали раскол в питона так:

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

Вы имеете в виду '.GET.getlist'? – Sayse

+3

Возможный дубликат [Обработка Django request.GET и нескольких переменных для одного и того же имени параметра] (http://stackoverflow.com/questions/3910165/handling-django-request-get-and-multiple-variables-for-the- same-parameter-name) – Sayse

+0

@Sayse, Это результат, когда я использую getlist .. [u '[- bet_amount, расчет_amount ['] –

ответ

1

Джанго позволяет отправлять множественные параметры GET в запросе, но способ их отправки неверен (и не только для Django)
Вы запрос должен быть в форме ?order=-age&order=height
Тогда в представлении вы можете сделать order_list = request.GET.getlist('order')

Вам не нужно, чтобы проверить, если ключ «порядок» в параметрах GET, как .getlist() возвращает пустой список, если ключ не найден ...

Если вы хотите только первый элемент из списка, вы можете использовать request.GET.get('order'), который возвращает None, если ключ отсутствует.

Окончательный код:

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

PS Хотя Джанго позволяет получить параметры, чтобы назвать что-нибудь, PHP (и я думаю, что другие веб-языков) требуют ПОЛУЧИТЬ перечислены параметры, которые будут названы парам [] (например, для того, []), и поэтому библиотеки, такие как JQuery, называют ваши параметры запроса AJAX как таковые. В этом случае вам следует использовать правильное имя в вашем представлении i.e request.GET.getlist('order[]')

+0

Спасибо за объяснение! Очень оценил это! –

Смежные вопросы