Skip to content

Commit e723c57

Browse files
author
Sergey Shubin
committed
Fixing bug with using multiple URL attributes (search, filters and page size)
1 parent 0795a3f commit e723c57

File tree

3 files changed

+57
-6
lines changed

3 files changed

+57
-6
lines changed

flask_admin/model/base.py

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1688,6 +1688,24 @@ def _get_list_extra_args(self):
16881688
search=request.args.get('search', None),
16891689
filters=self._get_list_filter_args())
16901690

1691+
def _get_filters(self, filters):
1692+
"""
1693+
Get active filters as dictionary of URL arguments and values
1694+
1695+
:param filters:
1696+
List of filters from ViewArgs object
1697+
"""
1698+
kwargs = {}
1699+
1700+
if filters:
1701+
for i, pair in enumerate(filters):
1702+
idx, flt_name, value = pair
1703+
1704+
key = 'flt%d_%s' % (i, self.get_filter_arg(idx, self._filters[idx]))
1705+
kwargs[key] = value
1706+
1707+
return kwargs
1708+
16911709
# URL generation helpers
16921710
def _get_list_url(self, view_args):
16931711
"""
@@ -1708,12 +1726,7 @@ def _get_list_url(http://github.com/self,%20view_args):
17081726
if view_args.page_size:
17091727
kwargs['page_size'] = view_args.page_size
17101728

1711-
if view_args.filters:
1712-
for i, pair in enumerate(view_args.filters):
1713-
idx, flt_name, value = pair
1714-
1715-
key = 'flt%d_%s' % (i, self.get_filter_arg(idx, self._filters[idx]))
1716-
kwargs[key] = value
1729+
kwargs.update(self._get_filters(view_args.filters))
17171730

17181731
return self.get_url('.index_view', **kwargs)
17191732

@@ -1935,6 +1948,7 @@ def page_size_url(http://github.com/s):
19351948
page_size_url=page_size_url,
19361949
page=view_args.page,
19371950
page_size=page_size,
1951+
default_page_size=self.page_size,
19381952

19391953
# Sorting
19401954
sort_column=view_args.sort,
@@ -1950,6 +1964,7 @@ def page_size_url(http://github.com/s):
19501964
filters=self._filters,
19511965
filter_groups=self._get_filter_groups(),
19521966
active_filters=view_args.filters,
1967+
filter_args=self._get_filters(view_args.filters),
19531968

19541969
# Actions
19551970
actions=actions,

flask_admin/templates/bootstrap2/admin/model/layout.html

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,18 @@
3434

3535
{% macro filter_form() %}
3636
<form id="filter_form" method="GET" action="{{ return_url }}">
37+
{% if sort_column is not none %}
38+
<input type="hidden" name="sort" value="{{ sort_column }}">
39+
{% endif %}
40+
{% if sort_desc %}
41+
<input type="hidden" name="desc" value="{{ sort_desc }}">
42+
{% endif %}
43+
{% if search %}
44+
<input type="hidden" name="search" value="{{ search }}">
45+
{% endif %}
46+
{% if page_size != default_page_size %}
47+
<input type="hidden" name="page_size" value="{{ page_size }}">
48+
{% endif %}
3749
<div class="pull-right">
3850
<button type="submit" class="btn btn-primary" style="display: none">{{ _gettext('Apply') }}</button>
3951
{% if active_filters %}
@@ -48,6 +60,12 @@
4860

4961
{% macro search_form(input_class="span2") %}
5062
<form method="GET" action="{{ return_url }}" class="search-form">
63+
{% for flt_name, flt_value in filter_args.items() %}
64+
<input type="hidden" name="{{ flt_name }}" value="{{ flt_value }}">
65+
{% endfor %}
66+
{% if page_size != default_page_size %}
67+
<input type="hidden" name="page_size" value="{{ page_size }}">
68+
{% endif %}
5169
{% if sort_column is not none %}
5270
<input type="hidden" name="sort" value="{{ sort_column }}">
5371
{% endif %}

flask_admin/templates/bootstrap3/admin/model/layout.html

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,18 @@
3434

3535
{% macro filter_form() %}
3636
<form id="filter_form" method="GET" action="{{ return_url }}">
37+
{% if sort_column is not none %}
38+
<input type="hidden" name="sort" value="{{ sort_column }}">
39+
{% endif %}
40+
{% if sort_desc %}
41+
<input type="hidden" name="desc" value="{{ sort_desc }}">
42+
{% endif %}
43+
{% if search %}
44+
<input type="hidden" name="search" value="{{ search }}">
45+
{% endif %}
46+
{% if page_size != default_page_size %}
47+
<input type="hidden" name="page_size" value="{{ page_size }}">
48+
{% endif %}
3749
<div class="pull-right">
3850
<button type="submit" class="btn btn-primary" style="display: none">{{ _gettext('Apply') }}</button>
3951
{% if active_filters %}
@@ -48,6 +60,12 @@
4860

4961
{% macro search_form(input_class="col-md-2") %}
5062
<form method="GET" action="{{ return_url }}" class="navbar-form navbar-left" role="search">
63+
{% for flt_name, flt_value in filter_args.items() %}
64+
<input type="hidden" name="{{ flt_name }}" value="{{ flt_value }}">
65+
{% endfor %}
66+
{% if page_size != default_page_size %}
67+
<input type="hidden" name="page_size" value="{{ page_size }}">
68+
{% endif %}
5169
{% if sort_column is not none %}
5270
<input type="hidden" name="sort" value="{{ sort_column }}">
5371
{% endif %}

0 commit comments

Comments
 (0)