在if()语句中使用字符串django错误:字符串作为左操作数,而不是QuerySet

时间:2014-06-03 17:34:59

标签: python django if-statement for-loop

所以,我收到的错误是:

TypeError: 'in <string>' requires string as left operand, not QuerySet

我有一个方法:

error_val = self.error_object
    for p in self.output:
        request = requests.get(p, timeout=settings.REQUESTS_TIMEOUT, verify=False)   
        for req in request:
            if error_val in req:
                print 'error Found in'+req

由于error_val

if()而导致此错误

在非专业人士的说法中,这基本上是在说(如果我没有记错的话),"Whoah, I'm getting a object value, with strings, but I can't compare to another object value"

req - 基本上是页面的html输出,例如<html><body><!--html content here--></body></html>

error_val - 是一个包含对象值的变量(来自django查询的结果)

我的问题:我如何重做此方法,我可以针对每个error_val使用req var(请求)?

任何帮助,评论和建议都非常有用。谢谢。

2 个答案:

答案 0 :(得分:1)

self.error_object包含QuerySet类的实例。并且您无法检查此类型的对象是否在字符串内。

QuerySet是一个类,它是Django ORM查询的包装器。它实现了iterable协议,因此您可以迭代它以逐个获取匹配的Model实例 然后,您可以将这些实例的字段作为普通对象属性进行访问。如果其中一个是字符串,那么您可以检查它是否是req的子字符串 很难说,你究竟想要做什么只是猜测:

for model_instance in self.error_object:
    for req in request:
        if model_instance.some_string_field in req:
             print 'error Found in' + req

答案 1 :(得分:0)

如果您正在尝试检查是否有任何多个对象&#39;字符串表示出现在您的响应中(我无法弄清楚其他行为&#34;字符串&#34;中的查询集可能打算创建)您想要的内容如下:

error_strings = [str(val) for val in self.error_object]
...
# then in your loop
if any(val in req for val in error_strings):

您可能还会分析创建or d一起使用错误字符串的正则表达式。