Почему я получаю ExtraValueException от монгоалхимии? - PullRequest
3 голосов
/ 18 октября 2011

Вот мой класс:

class Presentation(db.Document):
    title = db.StringField(max_length=120, required=True)
    author = db.StringField (required=True)
    pages = db.DocumentField(Page, required=False)
    tags = db.StringField(max_length=120, required=False)
    id = db.IntField(required=True)
    currentPage = db.IntField()
def __str__(self):
     return 'Title:%s author:%s  id:%d currentPage:%d' % ( self.title, self.author,self.id,self.currentPage)

Когда я использую его из оболочки Монго, все выглядит нормально:

db.Presentation.find ({ID: 2})

{ "_id" : ObjectId("4e9cdddd0ad5c97ee6000000"), 
"author" : "admin", "currentPage" : 3, "id" : 2, 
"pages" : { "content" : "", "pagenum" : 0 }, "title" : "dd" }

но когда я использую MongoAlchemy,

p = query.filter (Presentation.id == 2) .first ()

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "build/bdist.macosx-10.7-intel/egg/mongoalchemy/query.py", line 136, in first
File "build/bdist.macosx-10.7-intel/egg/mongoalchemy/query.py", line 388, in next
File "build/bdist.macosx-10.7-intel/egg/mongoalchemy/document.py", line 318, in unwrap
File "build/bdist.macosx-10.7-intel/egg/mongoalchemy/document.py", line 152, in __init__

mongoalchemy.exceptions.ExtraValueException: currentPage

Ответы [ 2 ]

2 голосов
/ 12 июня 2012

Для всех, кто имеет исключение ExtraValueException, вы также можете увидеть эту ошибку, если добавите дополнительную запятую в определение класса. Например, если у вас было:

...
pages = db.DocumentField(Page, required=False),
tags = db.StringField(max_length=120, required=False)
...

попытка использовать страницы или теги даст исключение ExtraValueException.

Это я научился своей собственной боли.

1 голос
/ 18 октября 2011

Я прочитал строку документа исключения и похоже, что для монгоалхимии определенная модель не регистрирует currentPage как атрибут документа Presentation, но в коде, который вы копируете, вставляется определение классаопределите атрибут.

Если вставленный копируемый класс является классом, который вы определили в своем проекте, попробуйте удалить файлы .pyc в своем проекте и повторно запустить приложение.

Поway currentPage имя переменной не соответствует PEP8 Соглашения об именах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...