Mongoengine自定义__init__后报unexpected keyword argument '__auto_convert'如何解决
问题原因
你重写的ProjectMember类__init__方法仅声明接收key、member_type两个入参,没有适配MongoEngine底层逻辑需要传入的额外内置参数(如报错中的__auto_convert、_created等),也没有将这些参数透传给父类Document的初始化方法,导致ORM从数据库查询结果构造实例时参数匹配失败。
解决方案
修改__init__方法的入参声明,增加可变参数接收所有额外入参并透传给父类初始化方法即可,修改后代码如下:
from mongoengine import StringField, Document, EmbeddedDocument, EmbeddedDocumentField class ProjectMemberKey(EmbeddedDocument): member_email = StringField(required=False) project_id = StringField(required=False) class ProjectMember(Document,Entity): key = EmbeddedDocumentField(ProjectMemberKey, primary_key=True) member_type = StringField() # 增加*args、**kwargs接收所有额外参数 def __init__(self, key, member_type, *args, **kwargs): # 把额外参数透传给Document父类的初始化方法 super(ProjectMember, self).__init__(*args, **kwargs) Entity.__init__(self) self.key = key self.member_type = member_type
修改后既保留了Entity类的初始化调用逻辑,也兼容了MongoEngine的底层实例化逻辑,原有你自定义创建实例的写法不需要做任何调整。
内容的提问来源于stack exchange,提问作者robo98
相关产品推荐
相关产品推荐

