Django - отсортировать ранее отфильтрованный список - PullRequest
0 голосов
/ 24 марта 2011

Я настоящий новичок в программировании и хочу убедиться, что этот подход достаточно твердый.

Я хочу отфильтровать результаты поиска по моей модели, а затем разрешить пользователям сортировать результаты по различным переменным.Моя мысль состояла в том, чтобы прикрепить переменные фильтра в качестве параметров GET к ссылке сортировки (которая затем будет иметь уникальные переменные сортировки).

Я просматривал другие сайты, и кажется, что, возможно, есть более элегантное решение (они не содержат огромных строк запросов).

Есть ли лучший подход?

Ответы [ 2 ]

0 голосов
/ 25 марта 2011

Администратор Django использует индексы, такие как o = 3, если вы хотите сократить его.

Вы можете сопоставить поля сортировки с индексом или другим более привлекательным именем.

sorts = {
    0: 'field1',
    1: 'field2',
    2: 'field3',
}

qs = qs.order_by(sorts.get(request.GET.get('o'), 'id'))

Вам также необходимо добавить восходящий / нисходящий код, но это только быстрый пример.

0 голосов
/ 24 марта 2011

Чтобы избежать строк запросов, вы можете использовать URL-маршрутизацию Django. Задача будет заключаться в том, чтобы создать соответствующие ссылки для ваших ссылок.

У Django есть удобный тег шаблона URL . Вы можете использовать его, чтобы определить URL-адрес для данного имени URL-адреса и его параметров.

В вашем urls.py у вас может быть что-то вроде:

url(r'^sort/(\d{4})/(\d{2})/$', 'funkysort', name='funkysort'),

Я использую функцию url ** в моем urlconf (urls.py), чтобы было проще назвать мой URL. Я называю свой URL ради тега шаблона {% url%}.

В вашем шаблоне вы можете сделать:

{% url funkysort 5 10 %}

и Django сгенерирует что-то вроде:

/mysite/sort/5/10/

** Примечание. Это отличается от тега шаблона URL. Если вы хотите сделать эквивалент тега шаблона URL в вашем коде, используйте функцию reverse .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...