Измените свойство «Объекты» документа на «запрос» - PullRequest
0 голосов
/ 19 марта 2020

Я пытаюсь изменить свойство объекта «document» документа на «query». Это более интуитивно понятно, так как каждый запрашивает базу данных. Подобно; Collection.query.find() вместо; Collection.objects.find() Я попытался установить атрибут запроса для моей модели коллекции, как;

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 >

Может ли кто-нибудь предложить решение?

1 Ответ

0 голосов
/ 20 марта 2020

Определите абстрактный класс Document и в нем определите собственный менеджер QuerySet, используя оболочку queryset_manager. Унаследуйте абстрактный класс как базовый класс для всех других последующих классов Document.

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.*. Отображение типа вернет <class 'mongoengine.queryset.queryset.Queryset'>, как и ожидалось.

...