我把所有这些碎片放在一起很麻烦 . 我从表单POST获取值表单中的名称/ ID是我的数据库表中的实际列名称 .
这里的想法是过滤级联select2输入以创建动态过滤器 . 例如,我当前的3个选择名称是字段,名称 . 如果我选择I字段,我只想提供该字段中的名称 . 如果没有选择字段,我提供所有名称(等等) . 显然, 生产环境 模型将超过2个 .
我试图迭代request.args以获取名称和值,然后添加到过滤器 . 下面是我的代码 .
@bp.route('/wells/name')
def wells_name():
if request.args:
qry = Wells.query
for var in request.args:
qry = qry.filter(getattr(Wells, var) == request.args['{}'.format(var)])
query = qry.with_entities(Wells.name).group_by(Wells.name).order_by(Wells.name)
else:
query = Wells.query.with_entities(Wells.name).group_by(Wells.name) \
.order_by(Wells.name)
我使用以下代码来获取变量的值;
request.args['{}'.format(var)]
以下代码表示Wells.variablename(此场景中的Wells.field或Wells.name)
getattr(Wells, var)
和以下示例一起尝试和'put it all together' https://stackoverflow.com/questions/39137911/build-dynamic-filters-in-sqlalchemy-python .
1 回答
好吧,这个问题绝对不是我所预料的 . 我在迭代迭代之前移动了with_entities,它解决了问题 . 我确信仍有改进的余地,但它比我所拥有的大大改善 . 这是新代码 .
和旧代码
随着更多的变量显然,“旧代码”会显着增长,即使只增加了第3代 .