python/mongoengine 将关键字参数作为变量传递

sli*_*lik 1 python mongoengine flask-mongoengine

我正在尝试创建一个传递键/值参数来获取对象的 get 方法。

def find_by_one(self, val, key='id'):
    obj = self.__model__.objects(key=val).first()
    return obj if obj else None
Run Code Online (Sandbox Code Playgroud)

我得到的错误

InvalidQueryError: Cannot resolve field "key"
Run Code Online (Sandbox Code Playgroud)

亲切地回答了我的问题。我最终改变了我的方法来传递 **kwargs 并将其作为我的查询集传递

  def find_by_one(self, **kwargs):
    user = self.__model__.objects(**kwargs).first()
    return user if user else None
Run Code Online (Sandbox Code Playgroud)

现在我可以调用我的 find_by_one

obj.find_by_one(id=obj_id)
Run Code Online (Sandbox Code Playgroud)

代替

obj.find_by_one(obj_id)
Run Code Online (Sandbox Code Playgroud)

kin*_*all 5

这意味着您的模型没有名为 的字段key,这正是它正在寻找的字段,因为您正在传入key=val

我假设您正在寻找keykey函数参数的值替换。关键字参数不能以这种方式工作,因此在这种情况下,您需要构造一个字典并使用解包:

obj = self.__model__.objects(**{key: val}).first()
Run Code Online (Sandbox Code Playgroud)