我是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:/
解决方案可能很简单,但我目前的技能还不够。
谢谢你的回答。