查询按QuerySelectMultipleField中的列表进行过滤

时间:2015-05-18 15:54:20

标签: python flask sqlalchemy wtforms


我是python和flask初学者,我需要WTForms的帮助:

我需要创建查询,按在QuerySelectMultipleField中检查的值进行过滤。

在我的测试代码中,我有两个列表:

  

动态(返回QuerySelectMultipleField) - > list_d
  静态(创建   手动) - > list_m

从QuerySelectMultipleField返回的列表是动态的,值例如是:

[Jedna, Dva, Tri]

手动创建列表:

list_m = ['Jedna', 'Dva', 'Tri']

MyView的:

 @admin.route('/tests', methods=['GET', 'POST'])
    def tests():
        list_d = None
        list_m = None
        items = None
        form = TestForms()
        if form.validate_on_submit():
            list_d = form.selectMultiple.data
            list_m = ['Jedna', 'Dva', 'Tri']
            items = Item.query.filter(Item.global_name.in_(list_m)).all()
            # items = Item.query.filter(Item.global_name.in_(list_d)).all()
        return render_template('admin/tests.html',
                               form=form,
                               list_d=list_d,
                               list_m=list_m,
                               items=items,
                               )

MyTemplate的:

<div class="box-body">
{{ wtf.quick_form(form) }}
<p>Dynamic list: {{ list_d }}</p>
<p>Manual list: {{ list_m }}</p>
<p>ITEMS: {{ items }}</p>
</div>

为MyModel:

class Item(db.Model):
    __tablename__ = 'items'
    id = db.Column(db.Integer, primary_key=True)
    global_name = db.Column(db.String(64), unique=True, index=True)
    item_name1 = db.Column(db.String(64), unique=True, index=True)
    records = db.relationship('Record', backref='item', lazy='dynamic')

def __init__(self, global_name):
    self.global_name = global_name

def __repr__(self):
    return str(self.global_name)

MyForm的:

def select_items():
    return Item.query.all()

class TestForms(Form):
    selectMultiple = QuerySelectMultipleField(query_factory=select_items,
                                              allow_blank=True,
                                              )
    submit = SubmitField('Submit')



这是我的问题:
手动创建使用列表时:

items = Item.query.filter(Item.global_name.in_(list_m)).all()

工作正常,在“项目”中,我看到值由list_m的值过滤。

但是当使用list_d(从QuerySelectMultipleField返回)时:

items = Item.query.filter(Item.global_name.in_(list_d)).all()

我收到错误消息:

  

builtins.TypeError TypeError:期望的字符串或缓冲区

和“items”为None:/

解决方案可能很简单,但我目前的技能还不够。

谢谢你的回答。

0 个答案:

没有答案