Функциональность поиска/фильтрации Django admin в качестве таблицы страниц
Мне было интересно, есть ли способ использовать возможности Django Admin filtering/ordering/paginating/search в обычном режиме.
Я имею в виду, что у меня есть модель, некоторые поля на ней. Я хотел бы иметь форму "поиска", где поля будут определены так же, как и с помощью admin.ModelAdmin. Пользователь сможет искать (используя предоставленные поля), фильтровать значения, разбивать страницы на страницы таблицы результатов и т.д. Все это без минимального количества работы с моей стороны, например. просто сконфигурируйте, какие поля следует использовать в форме. Что-то вроде этого:
class SchoolAdmin(ModelAdmin):
list_display = ('id', 'name', )
list_display_links = ('name', )
search_fields = ('name', )
list_filter = ('type', )
Есть ли что-то подобное? Или я должен сам его кодировать?
Изменить:
Возможности, требуемые от такого плагина/приложения:
- Отображение данных в виде таблицы
- Сортировка по столбцам
- Фильтрация (например, "показывать только строки, имеющие X = Y" )
- Поиск по столбцам
- Конфигурация, похожая на стиль ModelAdmin
Alasdair django-tables2 соответствует только 1-м и 2-му условиям.
Ответы
Ответ 1
Функциональность django, о которой вы упоминаете, на самом деле не может использоваться повторно в пользовательских представлениях по Django 1.3. Недавно была обсуждена группа разработчиков django-разработчиков о разделение функций администратора, чтобы сделать ее повторно используемой.
Я столкнулся с двумя проектами, которые могут вам пригодиться, django-tables2 и django-filter. Они оба предлагают немного разные вещи, я думаю, вы ищете смесь этих двух.
Джанго-tables2
django-tables2 упрощает задачу превращения наборов данных в таблицы HTML. Он имеет встроенную поддержку разбивки на страницы и сортировки. Он делает для таблиц HTML то, что django.forms делает для HTML-форм
Джанго-фильтр
Django-фильтр - это многозадачное приложение Django, позволяющее пользователям фильтровать queryset динамически. Для этого требуется Python 2.4 или выше. Для использования и инструкции по установке см. в каталоге документов.
Django-фильтр может использоваться для создания интерфейсов, подобных Django admin list_filter
. Он имеет API, очень похожий на Django's ModelForms
.
Ответ 2
Чтобы продлить ответ Alasdair, я добавил простой модуль, который добавляет простую фильтрацию в django-tables2. См. https://github.com/benjiec/django-tables2-simplefilter.