标记一个继承自超类,mongoengine的类

时间:2016-12-02 00:20:55

标签: python inheritance mongoengine

在mongoengine中,如果Document继承自另一个Document类,则会获得一个应用于它的_cls属性,该属性将其标识为子类的实例。从同一个超类继承的所有对象都存储在同一个集合中。

Supe(Document):
    pass

Sub(Supe):
    pass

Sub的实例会有_cls="Supe.Sub"。因为它是一个mongoengine约定,所以当从集合中提取对象并以JSON形式返回时,_cls不会传递。当然,我总是想要与查询匹配的对象,但有时我想以稍微不同的方式显示不同的子类,并且要求查看它们是否具有特定于子类的属性。

像这样标记子类是否合适:

Sub(Supe):
    kind = StringField(default='sub')
    ...

这让我觉得我错过了继承点,或者至少是mongoengine的方式。

1 个答案:

答案 0 :(得分:0)

  

"因为它是一个mongoengine惯例,所以_cls不会传递   object从集合中拉出并作为JSON"

返回
可以从数据库中检索

Ofcourse _cls密钥,您可以使用它来对对象进行分类。

  

像这样标记子类是否合适:

 Sub(Supe):
     kind = StringField(default='sub')

是的,为什么不呢?当您需要额外信息时,可以将其存储以匹配您的应用逻辑。但我认为你不需要这个,因为你可以访问_cls属性。