标记从超类继承的类mongoengine
问题描述:
在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做它的方式,或至少点。
答
“由于这是一个mongoengine惯例,_cls当 对象从集拉和返回JSON沿着不通过”
Ofcourse _cls
键可以从数据库中检索,你可以用它来分类你的对象。
难道是正确标注子是这样的:
Sub(Supe): kind = StringField(default='sub')
是的,为什么不呢?当你需要额外的信息可以存储它来匹配你的应用逻辑。但我认为你不需要这个,因为你可以访问_cls
属性。