Skip to content

Commit cafd696

Browse files
authored
fix: use id as a tiebreaker in the ordering (#2343)
* fix: use id as a tiebreaker in the ordering. * fix: use id as a tiebreaker in the ordering.
1 parent d1f9dad commit cafd696

File tree

1 file changed

+11
-4
lines changed

1 file changed

+11
-4
lines changed

flask_appbuilder/models/sqla/interface.py

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,7 @@ def apply_order_by(
178178
order_column: str,
179179
order_direction: str,
180180
aliases_mapping: Dict[str, AliasedClass] = None,
181+
add_pk: bool = False,
181182
) -> Query:
182183
if order_column != "":
183184
# if Model has custom decorator **renders('<COL_NAME>')**
@@ -201,10 +202,10 @@ def apply_order_by(
201202
_order_column = getattr(_alias, column_leaf)
202203
# get the primary key so we can add a tie breaker of the order
203204
# when the order column is not unique it can cause issues with pagination
204-
pk = self.get_pk()
205205
direction = asc if order_direction == "asc" else desc
206206
order_by_columns = [direction(_order_column)]
207-
if pk:
207+
pk = self.get_pk()
208+
if add_pk and pk:
208209
order_by_columns.append(direction(pk))
209210
query = query.order_by(*order_by_columns)
210211

@@ -387,7 +388,11 @@ def _apply_inner_all(
387388
query = self.apply_filters(query, inner_filters)
388389
query = self.apply_engine_specific_hack(query, page, page_size, order_column)
389390
query = self.apply_order_by(
390-
query, order_column, order_direction, aliases_mapping=aliases_mapping
391+
query,
392+
order_column,
393+
order_direction,
394+
aliases_mapping=aliases_mapping,
395+
add_pk=True,
391396
)
392397
query = self.apply_pagination(query, page, page_size)
393398
return query
@@ -454,7 +459,9 @@ def apply_all(
454459
select_columns = select_columns + [order_column]
455460
outer_query = inner_query.from_self()
456461
outer_query = self.apply_outer_select_joins(
457-
outer_query, select_columns, outer_default_load=outer_default_load
462+
outer_query,
463+
select_columns,
464+
outer_default_load=outer_default_load,
458465
)
459466
return self.apply_order_by(outer_query, order_column, order_direction)
460467
else:

0 commit comments

Comments
 (0)