Какие могут быть варианты решения вопросов по фильтрам в Django?

По ТЗ стоит 2 задачи которые нужно решить. Как решать представляется весьма смутно.



1) Возможность выделить в админке Django несколько элементов, и где-то показать результат обработки данных выделеных элементов (ну если проще — показать сумму из полей всех выделенных элементов).

Видится что тут как-то через Actions надо выходить, но не понятно куда можно было бы вывести результат суммирования.



2) Нужно вывести в админке Django данные из таблицы за определеный период (т.е. от одной даты, до другой). Естественно даты должны водиться пользователем. Сортировка по месяцам в Django есть и так, но вот как и куда присобачить панельку для ввода дат, и последующей фильтрации не ясно.



Кто нибудь может подсказать варианты? Использую Django 1.4 + admin_tools
  • Вопрос задан
  • 3111 просмотров
Пригласить эксперта
Ответы на вопрос 3
@marazmiki
Укротитель питонов
Возможность выделить в админке Django несколько элементов, и где-то показать результат обработки данных выделеных элементов (ну если проще — показать сумму из полей всех выделенных элементов).
Видится что тут как-то через Actions надо выходить, но не понятно куда можно было бы вывести результат суммирования.

На всякий случай уточню, что под actions обычно понимается работа с выбранными объектами на серверной стороне. Это значит, что когда Вы выбираете список моделей, нужное действие и жмёте кнопочку, делается запрос на сервер и отрабатывает функция такого вида:

def action_name(request, queryset):
    """
    В queryset попадут выбранные модели.
    """


Если эта функция возвращает None, происходит редирект на ту же страницу со списком моделей. Но она может вернуть и объект HttpResponse, а значит, и работать будет как обычная вьюшка. В частности, в этой функции можно посчитать искомую сумму и показать её на отдельной странице (подробнее об admin actions).

Чисто субъективно, способ не очень подходит: это ведь неудобно — сперва выбирать нужные модели, потом выбирать действие, потом давить кнопочку, страница перегрузится, выбранные галочки слетят… думаю, лучше делать вычисления на JS. По аналогии со скриптом, который показывает, сколько записей выбрано.

Нужно вывести в админке Django данные из таблицы за определеный период (т.е. от одной даты, до другой). Естественно даты должны водиться пользователем. Сортировка по месяцам в Django есть и так, но вот как и куда присобачить панельку для ввода дат, и последующей фильтрации не ясно.


Написание собственных фильтров в 1.4 реализовано довольно неплохо (пример). Можно создать свой класс фильтра с собственным шаблоном, в котором поля «от» и «до» выводятся дейт-пикерами. Располагаться эта панелька будет в стандартном месте для фильтров (справа, в серой колонке). По-моему, вполне себе решение.
Ответ написан
@marazmiki
Укротитель питонов
Шаблоны можно не трогать, всё уже придумано до нас:

class MyAppAdmin(admin.ModelAdmin):
    ...
    class Meta:
        js = ['/static/my_app/js/sum_fields.js']
Ответ написан
Комментировать
Cyxapeff
@Cyxapeff
Второй вопрос отлично гуглится djangosnippets.org/snippets/2675/ если нет желания писать самому.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы