Python typeerror:“in”需要字符串作为左操作数,而不是list-flask和sqlacmey
我是python新手,试图防止未知值被推送到名为Tasks的数据库表中,而Tasks不是另一个名为Terms的表中的值,该表的Terms按site\u类型查询,term\u parent==site\u类型 当我尝试循环Terms表中的数据并根据输入任务\站点\类型对其进行验证时,我只能在选择了所有项并且交换if not语句的情况下管理它,使其不会引发错误:typeerror:“in”需要字符串作为左操作数,而不是列表 这是一种炼金术,请求需要循环的数据Python typeerror:“in”需要字符串作为左操作数,而不是list-flask和sqlacmey,python,validation,flask,flask-sqlalchemy,Python,Validation,Flask,Flask Sqlalchemy,我是python新手,试图防止未知值被推送到名为Tasks的数据库表中,而Tasks不是另一个名为Terms的表中的值,该表的Terms按site\u类型查询,term\u parent==site\u类型 当我尝试循环Terms表中的数据并根据输入任务\站点\类型对其进行验证时,我只能在选择了所有项并且交换if not语句的情况下管理它,使其不会引发错误:typeerror:“in”需要字符串作为左操作数,而不是列表 这是一种炼金术,请求需要循环的数据 terms_site_type = Te
terms_site_type = Terms.query.filter(Terms.term_parent == "site_type").all()
从所选复选框中获取已发布列表
if request.method == 'POST':
# Gather Form Input
task_site_type = request.form.getlist('task_site_type')
e.g selecting two checkboxes task_site_type = ['Test1', 'All']
最接近它的东西
无错误-当我选择“全部”时,
任务\站点\类型与术语\站点\类型中的循环完全匹配
错误
形成此设置,该设置应验证针对数据库术语循环发布的内容
for term in terms_site_type:
if not task_site_type in term.term_title:
errors['task_site_type_list'] = 'Please select from list'
错误来自
if not task_site_type in term.term_title:
errors['task_site_type_list'] = 'Please select from list'
。。。是有效错误,因为中的左操作数是列表,右操作数是字符串。反之亦然
同样在您以前的代码中,我相信您应该循环完成任务并检查来自术语的列表,因为这是正确的验证方法
正确的方法如下所示:
for task in task_site_type:
if not task in terms_site_type:
errors['task_site_type_list'] = 'Please select from list'
def Diff(li1, li2):
return (list(set(li1) - set(li2)))
Diff(tasks, terms)
# if the resulting list is empty then the validation shall succeed
我的第一个答案可以完成这项工作,但更好的方法可能是获取两个列表,将它们转换为集合,并获得任务减去项的差值 您可以定义如下所示的函数:
for task in task_site_type:
if not task in terms_site_type:
errors['task_site_type_list'] = 'Please select from list'
def Diff(li1, li2):
return (list(set(li1) - set(li2)))
Diff(tasks, terms)
# if the resulting list is empty then the validation shall succeed
参考:
最后,,
更好的方法是推送输入列表,即查询过滤器本身中的任务,以便将验证带到数据库本身,而不是在代码中这样做