From bdb7471206e0c4b861199fdf2e7a7b74a228dee1 Mon Sep 17 00:00:00 2001 From: Wu Clan Date: Fri, 18 Apr 2025 23:12:04 +0800 Subject: [PATCH] Fix list query in the dict plugin --- backend/plugin/dict/crud/crud_dict_type.py | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/backend/plugin/dict/crud/crud_dict_type.py b/backend/plugin/dict/crud/crud_dict_type.py index 50f1d44e7..6eaf0b35e 100644 --- a/backend/plugin/dict/crud/crud_dict_type.py +++ b/backend/plugin/dict/crud/crud_dict_type.py @@ -1,7 +1,8 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- -from sqlalchemy import Select +from sqlalchemy import Select, and_, desc, select from sqlalchemy.ext.asyncio import AsyncSession +from sqlalchemy.orm import noload from sqlalchemy_crud_plus import CRUDPlus from backend.plugin.dict.model import DictType @@ -30,14 +31,20 @@ async def get_list(self, *, name: str | None, code: str | None, status: int | No :param status: 字典状态 :return: """ - filters = {} + stmt = select(self.model).options(noload(self.model.datas)).order_by(desc(self.model.created_time)) + + filters = [] if name is not None: - filters.update(name__like=f'%{name}%') + filters.append(self.model.name.like(f'%{name}%')) if code is not None: - filters.update(code__like=f'%{code}%') + filters.append(self.model.code.like(f'%{code}%')) if status is not None: - filters.update(status=status) - return await self.select_order('created_time', 'desc', **filters) + filters.append(self.model.status == status) + + if filters: + stmt = stmt.where(and_(*filters)) + + return stmt async def get_by_code(self, db: AsyncSession, code: str) -> DictType | None: """