Загрузить документ MongoEngine изнутри класса - PullRequest
1 голос
/ 21 февраля 2020

Есть ли способ загрузить документ MongoDB из класса, используя MongoEngine? В настоящее время я использую функцию загрузчика:

def load_user(username):
    user = User.objects(username=username).first()
    return user

Это работает, но было бы здорово, если бы соответствующий код мог содержаться внутри класса:

class User(mongoengine.Document):
    username = mongoengine.StringField()
    full_name = mongoengine.StringField()
    email = mongoengine.StringField()

    meta = {
        'db_alias': 'default',
        'collection': 'users'
    }

    def load(self, username)
        self = User.objects(username=username).first()

    def save(self, **kwargs):
        super(User, self).save(**kwargs)

Очевидно, присваивая self не работает, поскольку заменяет только переменную self. Кроме того, если бы я просто заменил все свойства класса на свойства, загруженные в отдельную переменную, я бы создал новый документ, если бы попытался его сохранить, так что это тоже не выглядит жизнеспособным решением.

Есть ли способ достичь этого?

1 Ответ

2 голосов
/ 27 февраля 2020

Вы можете использовать метод класса

    @classmethod
    def load(cls, username):
        return cls.objects(username=username).first()

Тогда вы можете использовать его прямо из класса:

User.load('some_user')
...