Django - эмуляция поиска / фильтрации интерфейса администратора

У меня есть простой вид Django, который отображает список объектов. Я хочу, чтобы пользователи могли искать / фильтровать / сортировать и т. Д. Список объектов. То, как интерфейс администратора делает это по умолчанию (со всеми включенными), именно то, что я ищу.

Есть ли простой способ сделать это в Django? Или есть какой-нибудь сторонний плагин, чтобы сделать это для меня? Или я застрял написание всего кода вручную?

Я чувствую, что это проблема, с которой сталкивались многие другие, так каков самый простой (и наименее избыточный) способ сделать это?

1 ответ

Решение

Вы можете либо отсортировать ваши объекты с помощью Javascript, либо вы можете отсортировать свои объекты на сервере.

Javascript ограничивает, потому что в случае большого количества разбитых на страницы объектов вы сможете только отсортировать то, что находится на текущей странице.

Самый простой способ - отсортировать записи на стороне сервера и позволить пользователю выбирать сортировку с помощью параметров GET; что-то вроде

http://mydomain.com/path/to/view/?sort=asc

Тогда, на ваш взгляд (это очень грубо и не должно быть так, как вы это делаете):

def myview(request):
    ...
    # Check if the user has provided a 'sort' parameter, and check what it is
    if request.GET.get("sort", None) is "asc":
        results = SomeModel.objects.get(...).order_by("-name")
    ...

Вы можете применить ту же логику для фильтрации, хотя (по моему мнению), если вы собираетесь изменять фактический набор запросов (возвращаемые объекты), фильтрация должна осуществляться через URL, а не через параметры GET (которые влияют только на порядок, в котором возвращаются результаты)

Другие вопросы по тегам