【问题标题】:Change Document 'objects' property to 'query'将文档“对象”属性更改为“查询”
【发布时间】:2020-03-19 12:21:24
【问题描述】:

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

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

但在检查类型时,它会返回 QueryManager 的类而不是 Queryset 之类的;

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

代替;

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

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

【问题讨论】:

  • 试试 Collection.query.get(params = 'params') ,它会为您获取该特定参数的数据。

标签: django python-3.x mongodb-query mongoengine flask-mongoengine


【解决方案1】:

定义一个抽象 Document 类,并在其中定义一个使用 queryset_manager 包装器的自定义 QuerySet 管理器。继承抽象类作为所有其他后续 Document 类的 Base 类。

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.*。 显示类型将按预期返回&lt;class 'mongoengine.queryset.queryset.Queryset'&gt;。

【讨论】:

    猜你喜欢
    • 2015-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-31
    • 2020-07-11
    • 2022-01-17
    • 2017-02-11
    • 1970-01-01
    相关资源
    最近更新 更多