Python 从类内加载MongoEngine文档

Python 从类内加载MongoEngine文档,python,mongodb,mongoengine,Python,Mongodb,Mongoengine,有没有办法使用MongoEngine从类中加载MongoDB文档?我目前正在使用加载程序函数: def load_user(username): user = User.objects(username=username).first() return user 这是可行的,但如果相关代码都能包含在类中,那就太好了: class User(mongoengine.Document): username = mongoengine.StringField() fu

有没有办法使用MongoEngine从类中加载MongoDB文档?我目前正在使用加载程序函数:

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
。另外,如果我只是将所有类属性替换为加载到单独变量中的属性,那么如果我试图保存它,我将创建一个新文档,因此这似乎也不是一个可行的解决方案


有什么方法可以做到这一点吗?

您可以使用classmethod

@classmethod
def加载(cls,用户名):
返回cls.objects(username=username).first()
然后您可以直接从类中使用它:

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)
User.load('some_User'))

哇,太简单了!非常感谢你!!