使用MongoEngine和Q构造查询会抛出InvalidQueryError

zel*_*nix 4 python django mongoengine

我正在尝试or使用MongoEnginedjango.db.models.Q类构造一个简单的查询.

我的代码(从中运行./manage.py shell)是:

from db.models import User
from django.db.models import Q

User.objects.filter(Q(username='foo') | Q(email='bar'))
Run Code Online (Sandbox Code Playgroud)

models.py只是

from mongoengine import *

class User(Document):
    username = StringField()
    email = StringField()
Run Code Online (Sandbox Code Playgroud)

我尝试了几个不同的版本,并始终得到以下错误:

Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "venv/lib/python2.7/site-packages/mongoengine/queryset/base.py", line 193, in filter
    return self.__call__(*q_objs, **query)
  File "venv/lib/python2.7/site-packages/mongoengine/queryset/base.py", line 109, in __call__
    raise InvalidQueryError(msg)
InvalidQueryError: Not a query object: (OR: ('username', 'foo'), ('email', 'bar')). Did you intend to use key=value?
Run Code Online (Sandbox Code Playgroud)

我正在使用Python 2.7.6以及以下包:

dj-database-url==0.3.0
dj-static==0.0.6
Django==1.8
django-toolbelt==0.0.1
gunicorn==19.3.0
mongoengine==0.9.0
psycopg2==2.6
pymongo==2.8
static3==0.5.1
Run Code Online (Sandbox Code Playgroud)

我是Python和Django的新手,但这看起来相当简单.我究竟做错了什么?

zel*_*nix 11

事实证明我导入了错误的Q类.因为MongoEngine它应该是:

from mongoengine.queryset.visitor import Q
Run Code Online (Sandbox Code Playgroud)