Mongoengine позволява наследяване на документи. Когато се дефинира клас, се използва мета атрибут allow_inheritance
, за да се позволи подкласиране на този конкретен клас. Полетата _cls
и _types
се използват за идентифициране към кой клас принадлежи обектът.
Помислете за документ, наречен User
, използван за съхраняване на потребителска информация:
class User(Document):
meta = {'allow_inheritance': True}
# stores information regarding a user
Сега помислете за документ, наречен StackOverFlowUser
: този документ е наследен от документа User
и запазва известна информация, свързана със StackOverflow, за потребител:
class StackOverFlowUser(User):
# stores StackOverflow information of a user
И за двата класа документи mongoengine ще използва една и съща колекция с име user
. Без значение кой обект на документ създавате, той ще бъде съхранен като документ в тази колекция.
За да се разграничи към кой клас принадлежи обектът, ще се използват полета _cls
и _types
.
За обект User
:
{
...
'_cls' = 'User',
'_types' = ['User', 'User.StackOverFlowUser']
}
За обект StackOverFlowUser
:
{
...
'_cls' = 'User.StackOverFlowUser',
'_types' = ['User', 'User.StackOverFlowUser']
}
Ако сте сигурни, че даден документ няма да има документ на подклас, тогава задайте allow_inheritance
на False
и mongoengine няма да запази _cls
и _types
полета за този документ.
person
Crazyshezy
schedule
14.12.2012