1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/huashiyuting-flask

 / Детали:

BaseModel.py не поддерживает множественные операции order_by

Завершенные
Владелец
Создано  
29.11.2024

Я новичок в разработке проектов. В процессе разработки я использовал 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

Комментарий (0)

GitLife Service Account Задача создана
GitLife Service Account изменить Статус задачи с Предстоит сделать на Завершенные
Развернуть журнал операций

Вход Перед тем как оставить комментарий

Статус
Ответственный
Контрольная точка
Pull Requests
Связанные запросы на слияние могут быть закрыты после их объединения
Ветки
Дата начала   -   Крайний срок
-
Закрепить/Открепить
Приоритет
Участники(1)
1
https://api.gitlife.ru/oschina-mirror/huashiyuting-flask.git
git@api.gitlife.ru:oschina-mirror/huashiyuting-flask.git
oschina-mirror
huashiyuting-flask
huashiyuting-flask