2014-12-10 8 views
1

У меня есть документ MongoEngine, который ранее не разрешал наследование. Затем я хотел унаследовать его, поэтому я установил {allow_inheritance:True}. Как только я это сделал, существующие документы для этой модели больше не появлялись при вызове <myModel>.objects. Если я на мгновение установил {allow_inheritance:False}, тогда документы вернутся. Почему это так?MongoEngine: Документы исчезают после allow_inheritance

Я использую MongoEngine verison 0.8.7

ответ

1

Фигурные его. При использовании allow_inheritance MongoEngine хранит специальное специальное поле _cls в базовом документе с именем класса или производного класса. Поэтому для вашего BaseClass он будет хранить "BaseClass" в качестве значения, а для вашего DerivedClass он будет хранить "BaseClass.DerivedClass" в качестве значения. Но без allow_inheritance набор первоначально, он не имеет этого специального _cls полевого набора. Поэтому после установки allow_inheritance мне пришлось зайти в поле mongo вручную (не через mongoengine) и выполнить update, чтобы добавить поле _cls с значением BaseClass, а затем снова появились документы.