'QCombination'对象不可迭代

时间:2014-02-08 04:33:21

标签: python django

执行时我遇到查询问题,这给了我错误。但是如果从控制台django运行,我会正确地返回结果

在python shell中(python manage.py shell)

>>> from api.models import User
>>> from django.db.models import Q
>>> User.objects.filter(Q(username__contains='lucas'))
[<User: @lucas>, <User: @lucasfuentes>, <User: @lucas_gasolero>]

在views.py

def search(req, keyword):
    users = User.objects.filter(
        Q(username__contains='lucas') | Q(name__contains='lucas')
    )
    [..]

错误:'QCombination'对象不可迭代

Traceback:
File "[..]/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
    115. response = callback(request, *callback_args, **callback_kwargs)

File "[..]/api/views.py" in search
    84.    Q(username__contains='lucas') | Q(name__contains='lucas')

File "[..]/lib/python2.7/site-packages/django/db/models/manager.py" in filter
    155.    return self.get_query_set().filter(*args, **kwargs)

File "[..]lib/python2.7/site-packages/django/db/models/query.py" in filter
    669.    return self._filter_or_exclude(False, *args, **kwargs)

File "[..]lib/python2.7/site-packages/django/db/models/query.py" in _filter_or_exclude
    687.    clone.query.add_q(Q(*args, **kwargs))

File "[..]lib/python2.7/site-packages/django/db/models/sql/query.py" in add_q
    1271.    can_reuse=used_aliases, force_having=force_having)
File "[..]lib/python2.7/site-packages/django/db/models/sql/query.py" in add_filter
    1066.    arg, value = filter_expr

Exception Type: TypeError at /v1/search/as/
Exception Value: 'QCombination' object is not iterable

2 个答案:

答案 0 :(得分:2)

就像@Nil说的那样,但请检查views.py中的Q import。它可能不是django.db.models.Q

答案 1 :(得分:0)

既然没有人回答,我会尝试一下。确保导入正确的User。在Django documentation中,它是这样导入的:

from django.contrib.auth.models import User

我们可以看到您在shell中使用from api.models import User,但我们看不到您在视图中导入User的方式。我知道它在shell中使用“bad”导入,但仍然确保在两种情况下使用正确的导入并告诉我们结果。如果它仍然不起作用,我不知道,抱歉!