2011-01-24 8 views
5

De acuerdo con los documentos: http://code.google.com/appengine/docs/python/datastore/datamodeling.html#References el objeto de referencia inverso creado automáticamente es un objeto Query, por lo que es posible una iteración sobre él y realizar llamadas de recuperación.Problema de referencia inversa de Appengine

Pero: que tienen un modelo:

class User(db.Model): 
    name = db.StringProperty() 
    ... 

y segundo modelo:

class Thing(db.Model): 
    owner = db.ReferenceProperty(User) 
    ... 

y cuando intento acceder a la referencia a la inversa:

for thing in user.thing_set: 
    ... 

o:

user.thing_set.fetch(100) 

me sale una excepción de esta manera:

<type 'exceptions.TypeError'>: '_ReverseReferenceProperty' object is not iterable 

o como esto:

<type 'exceptions.AttributeError'>: '_ReverseReferenceProperty' object has no attribute 'fetch' 

¿Estoy haciendo algo mal o que hubo algún cambio en appengine? Estoy bastante seguro de que anteriormente funcionaba como una consulta. Incluso hay un ejemplo en la página de documentos, que muestra el mismo uso que la mía:

for obj in obj1.secondmodel_set: 
    # ... 

Adicionalmente conseguir la consulta sin referencia inversa funciona bien:

things = Thing.all().filter('owner =', user) 
+0

¿Puede identificar cualquier circunstancia particular que dan lugar a la primera excepción y que dan lugar a la segunda excepción? –

Respuesta

1

Ambos métodos (iteración a buscar) debe trabajo. Para depurar, es posible que desee iniciar la sesión (o imprimir):

print dir(user) 
[..., 'thing_set', ...] 

print dir(user.thing_set) 
[..., '__iter__', ... , 'fetch', ...] 

sólo para ver qué contienen los objetos ... y que podría dar una pista de lo que podría ir mal.

Un par de ideas:

  • Quizás se referencia a otro clase de usuario por error: http://code.google.com/appengine/docs/python/users/userclass.html
  • Su objeto de usuario no se guarda.
  • En Windows, tiene algunos viejos archivos .pyc en: C: \ Users \ Tu nombre de usuario \ AppData \ Local \ VirtualStore \ Archivos de programa (x86) \ Google \ google_appengine
Cuestiones relacionadas