Почему я получаю экстравалэкцепцию от Mongoalchemy?
-
22-10-2019 - |
Вопрос
Вот мой класс:
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)
Когда я использую его из оболочки Mongo, все кажется хорошо:
db.presentation.find ({id: 2})
{ "_id" : ObjectId("4e9cdddd0ad5c97ee6000000"),
"author" : "admin", "currentPage" : 3, "id" : 2,
"pages" : { "content" : "", "pagenum" : 0 }, "title" : "dd" }
Но когда я использую Mongoalchemy,
p = Query.filter (Devisation.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
Решение
Я читаю Строка DOC исключения и кажется, что для Mongoalchemy определяемая модель не регистрирует текущую страницу как атрибут Presentation
Документ, но в коде, который вы копировали, вставил определение класса, определяет атрибут.
Если класс, который вы копируете,-это класс, который вы определили в своем проекте, попробуйте удалить файлы .pyc в своем проекте и повторно запустить приложение.
Кстати currentPage
Имя переменной не следует PEP8 Наименование соглашений.
Другие советы
Для любого другого, у которого есть ExtravalueException, вы также можете увидеть эту ошибку, если вы поместите дополнительную запятую в определение класса. Например, если у вас было:
...
pages = db.DocumentField(Page, required=False),
tags = db.StringField(max_length=120, required=False)
...
Попытка использовать либо страницы, либо теги даст экстравалоэкспений.
Это я научился своей собственной боли.