Django-фильтр пагинации только первого неудачного поискового файла
Я использую django-filter с пагинацией, пока файл поиска находится на первом месте в списке filter.py -> fields = ['name_procss','typeLevel'], пагинация для фильтра этого файла не работает.
fitler.py:
import django_filters
from MyCore.models import MyRunStats
class MyRunStatsFilter(django_filters.FilterSet):
def gen_choice(self,filed):
return tuple((l, l) for l in list(MyRunStats.objects.exclude(**{filed: None}).values_list(filed, flat=True).distinct()))
name_procss = django_filters.ChoiceFilter(label='Process',choices=tuple,null_label='None',null_value='null')
typeLevel = django_filters.ChoiceFilter(label='Message Type',choices=tuple,null_label='None',null_value='null')
class Meta:
model = MyRunStats
fields = ['name_procss','typeLevel']
def __init__(self, *args, **kwargs):
super(MyRunStatsFilter, self).__init__(*args, **kwargs)
self.filters['name_procss'].extra['choices'] = self.gen_choice('name_procss')
self.filters['typeLevel'].extra['choices'] = self.gen_choice('typeLevel')
Views.py
def runstat_hist_view_render(request):
all_obj = MyRunStats.objects.all().order_by('-create_dttm')
hist_filter = MyRunStatsFilter(request.GET, queryset=all_obj)
paginator= Paginator(hist_filter.qs[:57], 20)
page = request.GET.get('page')
try:
response = paginator.page(page)
except PageNotAnInteger:
response = paginator.page(1)
except EmptyPage:
response = paginator.page(paginator.num_pages)
context = {'response': response,'filter': hist_filter}
return render(request, 'My/My_runstat_hist.html',context)
html:
<form method="get" >
{{ filter.form}}
<button type="button" onclick="submitFilter()" id="hist-search-button" >Search Message</button>
</form>
{% for item in response %}
<nav>
<ul class="pagination">
{% if response.has_previous %}
<li><a href="?page=1&{{ request.get_full_path }}">« First</a></li>
<li ><a href="?page={{ response.previous_page_number }}&{{ request.get_full_path }}">Previous</a></li>
{% else %}
<li><a href="#">Previous</a></li>
{% endif %}
{% for num in response.paginator.page_range %}
{% if response.number == num %}
<li><a href="?page={{num}}&{{ request.get_full_path }}">{{num}}</a></li>
{% elif num > response.number|add:'-3' and num < response.number|add:'3' %}
<li><a href="?page={{num}}&{{ request.get_full_path }}">{{num}}</a></li>
{% endif %}
{% endfor %}
{% if response.has_next %}
<li><a href="?page={{ response.next_page_number }}&{{ request.get_full_path }}">Next</a></li>
<li><a href="?page={{ response.paginator.num_pages }}&{{ request.get_full_path }}">Last »</a></li>
{% else %}
<li><a href="#">Next</a></li>
{% endif %}
</ul>
</nav>
Проблема в том, что не важно какой элемент стоит на первом месте в filter.py->fields = ['name_procss','typeLevel'], например сейчас на первом месте стоит 'name_procss', тогда пагинация для 'name_procss' не работает, если я поставлю 'typeLevel' на первое место, тогда пагинация для 'typeLevel' не будет работать, а для 'name_procss' будет работать.