Domanda

Questa è la mia classe:

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)

Quando uso dalla shell mongo, tutto sembra a posto:

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

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

ma quando sto 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
È stato utile?

Soluzione

ho letto il doc string dell'eccezione e sembra che per mongoalchemy il modello definito non registra currentPage come un attributo di documento Presentation, ma nel codice che copiare incollato la definizione della classe relativi ai vari attributi.

Se la classe si copiare incollato è la classe che si è definito nel progetto, cercare di eliminare i file .pyc nel progetto e ri-eseguire l'applicazione.

Tra l'altro nome della variabile currentPage non segue PEP8 convenzioni di denominazione.

Altri suggerimenti

Per chiunque altro con un ExtraValueException, è anche possibile vedere questo errore se si mette un virgola in più nella definizione della classe. Per esempio, se aveste avuto:

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

cercando di utilizzare sia le pagine o tag darebbe un ExtraValueException.

Questo ho imparato al mio dolore.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top