Упрощение пары операторов if-else вокруг запроса Flask SqlAlchemy - PullRequest
0 голосов
/ 18 мая 2019

Мой запрос:

       if current_user['idx'] == 1:
            groups = sess.query(
            Role
            ).filter(
                ~Role.name.in_(codes.group1) # filtering
            ).order_by(
                Role.name
            )
        else:
            groups = sess.query(
            Role
            ).filter(
                ~Role.name.in_(codes.group2) # filtering
            ).order_by(
                Role.name
            )

Файл моих кодов:

group1= ['User']
group2 = ['Admin', 'User']

В моем запросе выше, я фильтрую с codes.group1 в if заявлении и codes.group2 в else. Поскольку запрашиваемая часть кода выглядит повторяющейся, есть ли способ сделать код более читабельным и чистым без повторений?

Ответы [ 2 ]

3 голосов
/ 18 мая 2019

Поскольку запросы почти идентичны, вы можете сделать:

normal_user = current_user['idx'] == 1
groups = sess.query(
    Role
).filter(
    ~Role.name.in_(codes.group1 if normal_user else codes.group2)
).order_by(
    Role.name
)

или

group = codes.group1 if current_user['idx'] == 1 else codes.group2
groups = sess.query(
    Role
).filter(
    ~Role.name.in_(group)
).order_by(
    Role.name
)
2 голосов
/ 18 мая 2019

Вы можете построить запрос постепенно, например так:

groups = sess.query(Role)

if current_user['idx'] == 1:
    groups = groups.filter(~Role.name.in_(codes.group1))
else:
    groups = groups.filter(~Role.name.in_(codes.group2))

groups = groups.order_by(Role.name)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...