Слияние кода завершено, страница обновится автоматически
Я новичок в разработке проектов. В процессе разработки я использовал BaseModel.py, написанный опытным разработчиком. При вызове метода getList невозможно выполнить множественную операцию order_by (что может быть бесполезно для некоторых бизнес-сценариев). На основе существующей базы кода были внесены небольшие изменения, которые поддерживают множественный order_by. Надеюсь, мы сможем улучшить код вместе.
@classTransaction
def getList(self, cls_: object, filters: set, order: str = "id desc", field: tuple = (), offset: int = 0, limit: int = 15) -> dict:
"""
Список
@param object cls_ модель базы данных
@param set filters условия запроса
@param str order порядок сортировки
@param tuple field поля
@param int offset смещение
@param int limit количество элементов
@return dict
"""
res = {}
res['page'] = {}
res['page']['count'] = dBSession.query(cls_).filter(*filters).count()
res['list'] = []
res['page']['total_page'] = self.get_page_number(res['page']['count'], limit)
res['page']['current_page'] = offset
if offset != 0:
offset = (offset - 1) * limit
if res['page']['count'] > 0:
res['list'] = dBSession.query(cls_).filter(*filters)
orderArr = order.split(',')
if len(orderArr) <= 1:
orderItem = order.split(' ')
if orderItem[1].upper() == 'DESC':
res['list'] = res['list'].order_by(desc(orderItem[0])).offset(offset).limit(limit).all()
else:
res['list'] = res['list'].order_by(asc(orderItem[0])).offset(offset).limit(limit).all()
else:
for item in orderArr:
orderItem = item.split(' ')
if orderItem[1].upper() == 'DESC':
res['list'] = res['list'].order_by(desc(orderItem[0]))
else:
res['list'] = res['list'].order_by(asc(orderItem[0]))
res['list'] = res['list'].offset(offset).limit(limit).all()
if not field:
res['list'] = [c.to_dict() for c in res['list']]
else:
res['list'] = [c.to_dict(only=field) for c in res['list']]
return res
Вход Перед тем как оставить комментарий