fix: use smarter default for grid.sort_multiple based on model class
This commit is contained in:
parent
45909e653b
commit
343567128f
3 changed files with 22 additions and 6 deletions
|
|
@ -186,8 +186,8 @@ class Grid: # pylint: disable=too-many-instance-attributes,too-many-public-meth
|
||||||
.. attribute:: sort_multiple
|
.. attribute:: sort_multiple
|
||||||
|
|
||||||
Boolean indicating whether "multi-column" sorting is allowed.
|
Boolean indicating whether "multi-column" sorting is allowed.
|
||||||
Default is ``True``; if this is ``False`` then only one column
|
This is true by default, where possible. If false then only
|
||||||
may be sorted at a time.
|
one column may be sorted at a time.
|
||||||
|
|
||||||
Only relevant if :attr:`sortable` is true, but applies to both
|
Only relevant if :attr:`sortable` is true, but applies to both
|
||||||
frontend and backend sorting.
|
frontend and backend sorting.
|
||||||
|
|
@ -399,7 +399,7 @@ class Grid: # pylint: disable=too-many-instance-attributes,too-many-public-meth
|
||||||
linked_columns=None,
|
linked_columns=None,
|
||||||
hidden_columns=None,
|
hidden_columns=None,
|
||||||
sortable=False,
|
sortable=False,
|
||||||
sort_multiple=True,
|
sort_multiple=None,
|
||||||
sort_on_backend=True,
|
sort_on_backend=True,
|
||||||
sorters=None,
|
sorters=None,
|
||||||
sort_defaults=None,
|
sort_defaults=None,
|
||||||
|
|
@ -441,7 +441,12 @@ class Grid: # pylint: disable=too-many-instance-attributes,too-many-public-meth
|
||||||
|
|
||||||
# sorting
|
# sorting
|
||||||
self.sortable = sortable
|
self.sortable = sortable
|
||||||
self.sort_multiple = sort_multiple
|
if sort_multiple is not None:
|
||||||
|
self.sort_multiple = sort_multiple
|
||||||
|
elif self.request.use_oruga:
|
||||||
|
self.sort_multiple = False
|
||||||
|
else:
|
||||||
|
self.sort_multiple = bool(self.model_class)
|
||||||
if self.sort_multiple and self.request.use_oruga:
|
if self.sort_multiple and self.request.use_oruga:
|
||||||
log.warning(
|
log.warning(
|
||||||
"grid.sort_multiple is not implemented for Oruga-based templates"
|
"grid.sort_multiple is not implemented for Oruga-based templates"
|
||||||
|
|
|
||||||
|
|
@ -2488,7 +2488,6 @@ class MasterView(View): # pylint: disable=too-many-public-methods
|
||||||
kwargs.setdefault("filterable", self.filterable)
|
kwargs.setdefault("filterable", self.filterable)
|
||||||
kwargs.setdefault("filter_defaults", self.filter_defaults)
|
kwargs.setdefault("filter_defaults", self.filter_defaults)
|
||||||
kwargs.setdefault("sortable", self.sortable)
|
kwargs.setdefault("sortable", self.sortable)
|
||||||
kwargs.setdefault("sort_multiple", not self.request.use_oruga)
|
|
||||||
kwargs.setdefault("sort_on_backend", self.sort_on_backend)
|
kwargs.setdefault("sort_on_backend", self.sort_on_backend)
|
||||||
kwargs.setdefault("sort_defaults", self.sort_defaults)
|
kwargs.setdefault("sort_defaults", self.sort_defaults)
|
||||||
kwargs.setdefault("paginated", self.paginated)
|
kwargs.setdefault("paginated", self.paginated)
|
||||||
|
|
@ -3041,7 +3040,6 @@ class MasterView(View): # pylint: disable=too-many-public-methods
|
||||||
kwargs.setdefault("filterable", self.rows_filterable)
|
kwargs.setdefault("filterable", self.rows_filterable)
|
||||||
kwargs.setdefault("filter_defaults", self.rows_filter_defaults)
|
kwargs.setdefault("filter_defaults", self.rows_filter_defaults)
|
||||||
kwargs.setdefault("sortable", self.rows_sortable)
|
kwargs.setdefault("sortable", self.rows_sortable)
|
||||||
kwargs.setdefault("sort_multiple", not self.request.use_oruga)
|
|
||||||
kwargs.setdefault("sort_on_backend", self.rows_sort_on_backend)
|
kwargs.setdefault("sort_on_backend", self.rows_sort_on_backend)
|
||||||
kwargs.setdefault("sort_defaults", self.rows_sort_defaults)
|
kwargs.setdefault("sort_defaults", self.rows_sort_defaults)
|
||||||
kwargs.setdefault("paginated", self.rows_paginated)
|
kwargs.setdefault("paginated", self.rows_paginated)
|
||||||
|
|
|
||||||
|
|
@ -32,6 +32,7 @@ class TestGrid(WebTestCase):
|
||||||
return mod.Grid(request or self.request, **kwargs)
|
return mod.Grid(request or self.request, **kwargs)
|
||||||
|
|
||||||
def test_constructor(self):
|
def test_constructor(self):
|
||||||
|
model = self.app.model
|
||||||
|
|
||||||
# empty
|
# empty
|
||||||
grid = self.make_grid()
|
grid = self.make_grid()
|
||||||
|
|
@ -44,6 +45,18 @@ class TestGrid(WebTestCase):
|
||||||
self.assertIsInstance(grid.columns, FieldList)
|
self.assertIsInstance(grid.columns, FieldList)
|
||||||
self.assertEqual(grid.columns, ["foo", "bar"])
|
self.assertEqual(grid.columns, ["foo", "bar"])
|
||||||
|
|
||||||
|
# sort_multiple is off by default with no model class
|
||||||
|
self.assertFalse(grid.sort_multiple)
|
||||||
|
|
||||||
|
# sort_multiple is *on* by default *with* model class
|
||||||
|
grid = self.make_grid(model_class=model.User)
|
||||||
|
self.assertTrue(grid.sort_multiple)
|
||||||
|
|
||||||
|
# ..but not if using oruga
|
||||||
|
with patch.object(self.request, "use_oruga", new=True):
|
||||||
|
grid = self.make_grid(model_class=model.User)
|
||||||
|
self.assertFalse(grid.sort_multiple)
|
||||||
|
|
||||||
def test_constructor_sorting(self):
|
def test_constructor_sorting(self):
|
||||||
model = self.app.model
|
model = self.app.model
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue