Django - Храните данные отфильтрованными в течение всего сеанса с помощью django-filters
У меня есть представление, которое перечисляет все данные из модели с формой, которая позволяет фильтровать данные с помощью библиотеки django-filters. Представление также хранит отфильтрованные данные в сессии, внутри переменной form_data. Представление:
def list_accsplan(request):
accsplan = AccountsPlan.objects.all().order_by('code')
accsplanfilter = AccountsPlanFilter(request.GET, queryset=accsplan)
request.session['form_data'] = accsplanfilter.data
form_data = request.session.get('form_data')
paginator = Paginator(accsplanfilter.qs, 30)
page = request.GET.get('page')
try:
dataqs = paginator.page(page)
except PageNotAnInteger:
dataqs = paginator.page(1)
except EmptyPage:
dataqs = paginator.page(paginator.num_pages)
return render(request, 'confi/pages/accounts_plan/list_accsplan.html', context={
'accsplan': accsplan,
'accsplanfilter': accsplanfilter,
'dataqs': dataqs,
})
Форма фильтра выглядит следующим образом:
class AccountsPlanFilter(django_filters.FilterSet):
accplantype = ChoiceFilter(choices=AccountsPlan.AccPlanType.choices, field_name='accplantype',)
code = CharFilter(field_name='code', lookup_expr='icontains',)
name = CharFilter(field_name='name', lookup_expr='icontains',)
active = BooleanFilter(field_name='active', widget=CustomBooleanWidget,)
class Meta:
model = AccountsPlan
fields = '__all__'
Я хочу сохранить этот список отфильтрованным, пока активна сессия, даже если пользователь меняет страницы, а затем вернуться к этой, но я застрял в том, как это сделать.
Я попытался добавить оператор if в представлении следующим образом:
if form_data:
accsplan = AccountsPlan.objects.filter(**form_data)
accsplanfilter = AccountsPlanFilter(request.GET, queryset=accsplan)
Но я получаю эту ValidationError в списке:
ValidationError at /list_accsplan/ ["значение "['true']" должно быть True ou False."]
Я думал, что это из-за того, что я не отфильтровал поле active, но даже выбор одного поля дает мне эту ошибку. Как я могу передать эти параметры в представление и сохранить применение фильтров до тех пор, пока сессия активна? Спасибо!