2016-12-02 6 views
2

В mongoengine, если документ наследуется от другого класса документа, он получает применимый к нему атрибут _cls, который идентифицирует его как экземпляр подкласса. Все объекты, которые наследуются от одного и того же Суперкласса, хранятся в одной коллекции.Маркировка класса, который наследуется от суперкласса, mongoengine

Supe(Document): 
    pass 

Sub(Supe): 
    pass 

И экземпляр Sub будет иметь _cls="Supe.Sub". Поскольку это соглашение mongoengine, _cls не передается, когда объект извлекается из коллекции и возвращается как JSON. Конечно, я всегда хочу, чтобы объекты соответствовали запросу, но иногда я хочу отображать разные подклассы несколькими способами и прибегать к тому, чтобы видеть, есть ли у них атрибут подкласса.

Подобает маркировать подклассы, как это:

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

Это заставляет меня чувствовать, что я пропускаю точку наследования или по крайней мере, на пути mongoengine это делает.

ответ

0

«Как это mongoengine конвенции, _cls не передается вместе, когда объект извлекается из коллекции и вернулся в JSON»

Ofcourse _cls ключ может быть извлечен из базы данных, вы можете используйте это, чтобы классифицировать свои объекты.

Подобает маркировать подклассы, как это:

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

Да, почему бы и нет? когда вам нужна дополнительная информация, это нормально, чтобы сохранить ее в соответствии с логикой вашего приложения. Но я думаю, что вам это не нужно, так как вы можете получить доступ к атрибуту _cls.