2016-12-02 99 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屬性。