Python typeerror:“in”需要字符串作为左操作数,而不是list-flask和sqlacmey

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

我是python新手,试图防止未知值被推送到名为Tasks的数据库表中,而Tasks不是另一个名为Terms的表中的值,该表的Terms按site\u类型查询,term\u parent==site\u类型

当我尝试循环Terms表中的数据并根据输入任务\站点\类型对其进行验证时,我只能在选择了所有项并且交换if not语句的情况下管理它,使其不会引发错误:typeerror:“in”需要字符串作为左操作数,而不是列表

这是一种炼金术,请求需要循环的数据

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
参考:

最后,, 更好的方法是推送输入列表,即查询过滤器本身中的任务,以便将验证带到数据库本身,而不是在代码中这样做