2014-01-16 4 views
0

Это действительно расстраивает.`NotRegistered` Исключение при использовании множественного наследования

Ниже приведены мои определения документов, для того, чтобы иметь Подгруппа документы наследуют от базового класса, я последовал за предложение здесь: https://groups.google.com/forum/#!topic/mongoengine-users/T8lCtGv_IYQ

модели/thread.py

class Thread(object): 
    meta = { 
     'allow_inheritance': True 
    } 

модели/форум .py

from models.thread import Thread 
from mongoengine import Document 

class ForumThread(Document, Thread): 
    meta = { 
     'collection': 'forum_threads' 
    } 

модели/group.py

from models.thread import Thread 
from mongoengine import Document 

class GroupThread(Document, Thread): 
    meta = { 
     'collection': 'group_threads' 
    } 

Я получаю NotRegistered при попытке чего-то подобного;

>>> from models.forum import ForumThread 
>>> print ForumThread.objects().first() 
>>> NotRegistered: `Thread` has not been registered in the document registry. 
      Importing the document class automatically registers it, has it 
      been imported? 

Любая помощь/совет были бы высоко оценены.

+1

ли 'Thread' были импортированы? – Kevin

+0

Я обновил свой вопрос, чтобы быть более ясным. – user1236803

ответ

0

Я не уверен, что тема нуждается в meta, в качестве альтернативы попробуйте абстрактный базовый класс [1]

class Thread(Document): 
    meta = { 
     'abstract': True 
    } 

class ForumThread(Thread): 
    meta = { 
     'collection': 'forum_threads' 
    } 

class GroupThread(Thread): 
    meta = { 
     'collection': 'group_threads' 
    } 

[1] http://docs.mongoengine.org/guide/defining-documents.html#abstract-classes

+0

Это дает мне KeyError: 'id_field' при попытке запроса. Все, что я хочу, - это одно место для определения полей потоков и способ представления потоков в нескольких коллекциях. – user1236803

+0

ли атрибут метаданных 'id_field' должен быть установлен на всех абстрактных классах? Добавляя это к Thread .__ meta__ dict, я больше не могу получить доступ к mongoengine documents '_id' как' id' в коде. – user1236803

+0

Я также попытался установить Thread._meta ['id_field'] на 'id' и' _id' безрезультатно. Все наши документы имеют поле '_id'. Спасибо за помощь Росс. – user1236803

Смежные вопросы