Пагинация в Django Admin с помощью пользовательских фильтров списков
У меня есть прокси-модель и секция администратора, где я реализую пользовательский фильтр мультиселекта. Результаты приходят правильно. Однако пагинация не работает с этим фильтром.
http://127.0.0.1:8000/users/?taggroup=1&taggroup=2
Когда я пытаюсь кликнуть на страницу 2, url превращается в :
http://127.0.0.1:8000/users/?page=2&taggroup=2
Но ожидаемый результат :
http://127.0.0.1:8000/users/?page=2&taggroup=1&taggroup=2
Я попробовал переопределить список изменений, используя [https://stackoverflow.com/questions/62960518/overriding-django-admin-pagination-along-with-url-parameters][1]
Но теперь пагинация выглядит следующим образом, когда я пытаюсь перейти со страницы 1 на страницу 2, а также пагинация начинается с 0, а не с 1:
http://127.0.0.1:8000/users/?page=2&page=1
Ниже приведен код, который я пробовал:
@register.inclusion_tag('admin/custom_pagination.html', takes_context=True)
def custom_pagination(context, cl):
pagination = admin_list.pagination(cl)
if 'group_id' in context:
pagination['params'] = (('taggroup', context['group_id']),)
return pagination
change_list_template = 'admin/users_changelist.html'
def changelist_view(self, request, extra_context=""):
response = super(PartnerUsersAdmin, self).changelist_view(
request, extra_context)
group_id = request.GET.urlencode()
if group_id:
extra_context = {
'group_id': str(group_id),
}
response.context_data.update(extra_context)
return TemplateResponse(request, "admin/partner_users_changelist.html", response.context_data)
#custom_pagination.html
{% load admin_list %}
{% load i18n %}
{% load content_extras %}
<p class="paginator">
{% if pagination_required %}
{% for i in page_range %}
<a href="?p={{ i }}{% for key, value in params %}{% if key != 'p' %}&{{ value }}{% endif %}{% endfor %}">
{{i}}</a>
{% endfor %}
{% endif %}
{{ cl.result_count }} {% if cl.result_count == 1 %}{{ cl.opts.verbose_name }}{% else %}
{{ cl.opts.verbose_name_plural }}{% endif %}
{% if show_all_url %}<a href="{{ show_all_url }}" class="showall">{% trans 'Show all' %}</a>{% endif %}
{% if cl.formset and cl.result_count %}<input type="submit" name="_save" class="default" value="{% trans 'Save' %}">
{% endif %}
</p>
#users_changelist.html
Добавлена следующая строка:
{% block pagination %}{% custom_pagination cl %}{% endblock %}