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
|
||||
|
||||
Boolean indicating whether "multi-column" sorting is allowed.
|
||||
Default is ``True``; if this is ``False`` then only one column
|
||||
may be sorted at a time.
|
||||
This is true by default, where possible. If false then only
|
||||
one column may be sorted at a time.
|
||||
|
||||
Only relevant if :attr:`sortable` is true, but applies to both
|
||||
frontend and backend sorting.
|
||||
|
|
@ -399,7 +399,7 @@ class Grid: # pylint: disable=too-many-instance-attributes,too-many-public-meth
|
|||
linked_columns=None,
|
||||
hidden_columns=None,
|
||||
sortable=False,
|
||||
sort_multiple=True,
|
||||
sort_multiple=None,
|
||||
sort_on_backend=True,
|
||||
sorters=None,
|
||||
sort_defaults=None,
|
||||
|
|
@ -441,7 +441,12 @@ class Grid: # pylint: disable=too-many-instance-attributes,too-many-public-meth
|
|||
|
||||
# sorting
|
||||
self.sortable = sortable
|
||||
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:
|
||||
log.warning(
|
||||
"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("filter_defaults", self.filter_defaults)
|
||||
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_defaults", self.sort_defaults)
|
||||
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("filter_defaults", self.rows_filter_defaults)
|
||||
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_defaults", self.rows_sort_defaults)
|
||||
kwargs.setdefault("paginated", self.rows_paginated)
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@ class TestGrid(WebTestCase):
|
|||
return mod.Grid(request or self.request, **kwargs)
|
||||
|
||||
def test_constructor(self):
|
||||
model = self.app.model
|
||||
|
||||
# empty
|
||||
grid = self.make_grid()
|
||||
|
|
@ -44,6 +45,18 @@ class TestGrid(WebTestCase):
|
|||
self.assertIsInstance(grid.columns, FieldList)
|
||||
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):
|
||||
model = self.app.model
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue