将文档 'objects' 属性 更改为 'query'

Change Document 'objects' property to 'query'

我正在尝试将文档 'objects' 属性 更改为 'query'。它更直观,因为一个人正在查询数据库。 喜欢; Collection.query.find() 代替; Collection.objects.find() 我试过为我的 Collection 模型设置一个查询属性,例如;

class Collection(Document):
    def __setattr__(self, key, objects):
        self.__dict__['query'] = self.objects

但是在检查类型时,它 returns 是 QueryManager 的 class 而不是 Queryset 之类的;

>>>print(type(Collection.query))
<'class' mongoengine.queryset.queryset.QueryManager >

而不是;

>>>print(type(Collection.query))
<'class' mongoengine.queryset.queryset.Queryset >

有人可以提供解决方案吗?

定义一个抽象文档 class 并在其中使用 queryset_manager 包装器定义自定义查询集管理器。继承摘要 class 作为所有其他后续文档 class 的基础 class。

from mongoengine.document import Document
from mongoengine.queryset import queryset_manager

class BaseDocument(Document):
    meta = {'abstract': True}
    @queryset_manager
    def query(self, queryset):
        return queryset

class Foo(BaseDocument):
    ...

查询使用Foo.query.*更直观 而不是默认的 Foo.objects.*。 显示类型将按预期 return <class 'mongoengine.queryset.queryset.Queryset'>