2009-05-12 8 views
5

Decir que tengo el siguiente modelo:Construir una consulta GQL (para Google App Engine) que tiene una condición de ReferenceProperty

class Schedule(db.Model): 
    tripCode = db.StringProperty(required=True) 
    station = db.ReferenceProperty(Station, required=True)  
    arrivalTime = db.TimeProperty(required=True) 
    departureTime = db.TimeProperty(required=True) 

Y digamos que tengo un objeto de la estación almacenada en el var foo.

¿Cómo puedo armar una consulta GQL que devuelve todos los objetos Programar con una referencia al objeto Estación al que hace referencia el foo?

Este es mi mejor (aunque incorrecta) intento de formar dicha consulta:

myQuery = "SELECT * FROM Schedule where station = " + str(foo.key()) 

Una vez más foo es un objeto estación

Respuesta

10

No se le debe insertar usuario datos en una cadena GQL utilizando sustitución de cadena. GQL apoya la sustitución de parámetros, por lo que se puede hacer esto:

db.GqlQuery("SELECT * FROM Schedule WHERE station = $1", foo.key()) 

o, utilizando la interfaz de consulta:

Schedule.all().filter("station =", foo.key()) 
+2

FWIW, no es necesario poner foo.key() en el segundo caso. Esto funcionará: Schedule.all(). Filter ("station =", foo) – mainsocial

+0

Lo tengo trabajando solo con la sugerencia propuesta por @mainsocial – Gus

7

Una cosa más fácil que hacer es cambiar la definición del modelo añadiendo el 'COLLECTION_NAME' de campo a la ReferenceProperty:

estación = db.ReferenceProperty (estación, se requiere = True, COLLECTION_NAME = "listas")

A continuación, sólo se puede hacer:

foo.schedules

cada vez que desee obtener los horarios todas las emisoras.