diff --git a/spoolman/database/spool.py b/spoolman/database/spool.py index 7710231..f71a40b 100644 --- a/spoolman/database/spool.py +++ b/spoolman/database/spool.py @@ -148,16 +148,20 @@ async def find( if sort_by is not None: for fieldstr, order in sort_by.items(): + sorts = [] if fieldstr == "remaining_weight": stmt = stmt.add_columns((models.Filament.weight - models.Spool.used_weight).label("remaining_weight")) - field = sqlalchemy.column("remaining_weight") + sorts.append(sqlalchemy.column("remaining_weight")) + elif fieldstr == "filament.combined_name": + sorts.append(models.Vendor.name) + sorts.append(models.Filament.name) else: - field = parse_nested_field(models.Spool, fieldstr) + sorts.append(parse_nested_field(models.Spool, fieldstr)) if order == SortOrder.ASC: - stmt = stmt.order_by(field.asc()) + stmt = stmt.order_by(*(f.asc() for f in sorts)) elif order == SortOrder.DESC: - stmt = stmt.order_by(field.desc()) + stmt = stmt.order_by(*(f.desc() for f in sorts)) rows = await db.execute(stmt) result = list(rows.unique().scalars().all())