2016-12-02 78 views
2

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

Supe(Document): 
    pass 

Sub(Supe): 
    pass 

而Sub的实例将有_cls="Supe.Sub"。由于这是一个mongoengine约定,当从集合中抽取对象并返回为JSON时,_cls不会传递。当然,我总是希望与查询相匹配的对象,但有时我想用不同的方式显示不同的子类,并采取措施查看它们是否具有子类特定的属性。

难道是正确标注子是这样的:

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

这让我觉得我缺少继承mongoengine做它的方式,或至少点。

回答

0

“由于这是一个mongoengine惯例,_cls当 对象从集拉和返回JSON沿着不通过”

Ofcourse _cls键可以从数据库中检索,你可以用它来分类你的对象。

难道是正确标注子是这样的:

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

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