在mongoengine中,如果Document继承自另一个Document类,则会获得一个应用于它的_cls
属性,该属性将其标识为子类的实例。从同一个超类继承的所有对象都存储在同一个集合中。
Supe(Document):
pass
Sub(Supe):
pass
Sub的实例会有_cls="Supe.Sub"
。因为它是一个mongoengine约定,所以当从集合中提取对象并以JSON形式返回时,_cls
不会传递。当然,我总是想要与查询匹配的对象,但有时我想以稍微不同的方式显示不同的子类,并且要求查看它们是否具有特定于子类的属性。
像这样标记子类是否合适:
Sub(Supe):
kind = StringField(default='sub')
...
这让我觉得我错过了继承点,或者至少是mongoengine的方式。
答案 0 :(得分:0)
可以从数据库中检索"因为它是一个mongoengine惯例,所以_cls不会传递 object从集合中拉出并作为JSON"
返回
Ofcourse _cls
密钥,您可以使用它来对对象进行分类。
像这样标记子类是否合适:
Sub(Supe): kind = StringField(default='sub')
是的,为什么不呢?当您需要额外信息时,可以将其存储以匹配您的应用逻辑。但我认为你不需要这个,因为你可以访问_cls
属性。