Мне нужно вести список отфильтрованных и отсортированных объектов, желательно в общем виде, которые можно использовать в нескольких представлениях. Это необходимо, чтобы я мог генерировать следующие ссылки назад, а также некоторые другие полезные для пользователя вещи.
Примеры фильтров:
field__isnull=True
field__exact="so"
field__field__isnull=False
Кроме того, после построения отфильтрованного набора запросов можно применить порядок к любому из полей.
Мое текущее решение состоит в том, чтобы использовать класс FilterSpec, содержащий коллекцию фильтров вместе с начальным набором запросов. Затем этот класс сериализуется и передается в представление.
Рассмотрим представление с 25 динамически фильтруемыми элементами. Каждый элемент в представлении имеет ссылку, чтобы получить подробный вид элемента. К каждой из этих ссылок добавляется сериализованный объект FilterSpec текущего списка. Таким образом, вы получите огромные URL. Хуже того, один и тот же огромный фильтр добавлен ко всем 25 ссылкам!
Другим вариантом является сохранение FilterSpec в сеансе, но затем вы сталкиваетесь с проблемами, когда удалять FilterSpec. Затем вы обнаружите, что все ваши представления загромождены кодом, пытающимся определить, должен ли фильтр быть удален при подготовке нового списка объектов.
Я уверен, что эта проблема была решена раньше, поэтому я хотел бы услышать другие решения, которые вы, ребята, придумали.