Pregunta

Aquí está mi clase:

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)

Cuando lo uso de Mongo Shell, todo parece estar bien:

db.presentation.find ({id: 2})

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

Pero cuando estoy usando 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
¿Fue útil?

Solución

I read the doc string of the exception and It seems like for mongoalchemy the model defined doesn't register currentPage as an attribute of Presentation document, but in the code you copy pasted the class definition define the attribute.

If the class you copy pasted is the class that you defined in your project, try to delete .pyc files in your project and re-run the application.

By the way currentPage variable name does not follow PEP8 Naming Conventions.

Otros consejos

For anyone else with a ExtraValueException, you can also see this error if you put an extra comma in the Class definition. For example if you had had:

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

trying to use either pages or tags would give an ExtraValueException.

This I learnt to my own pain.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top