Construir un GQL de consulta (Google App Engine) que tiene una condición en ReferenceProperty
-
21-08-2019 - |
Pregunta
Decir que tengo el siguiente modelo:
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 departamento de var foo
.
¿Cómo puedo montar una GQL consulta que devuelve todos los objetos de Programación con una referencia a la Estación del objeto al que hace referencia foo
?
Este es mi mejor (aunque incorrecta) intento de formar una consulta:
myQuery = "SELECT * FROM Schedule where station = " + str(foo.key())
Una vez más foo
es un La estación de objeto
Solución
No debe ser la inserción de los datos del usuario en una cadena GQL mediante sustitución de cadenas. 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())
Otros consejos
Una cosa más fácil que hacer es cambiar la definición del modelo añadiendo el campo 'COLLECTION_NAME' a la ReferenceProperty:
estación = db.ReferenceProperty (estación, requeridos = True, COLLECTION_NAME = "listas")
A continuación, sólo se puede hacer:
foo.schedules
cada vez que desee obtener los horarios todas las emisoras.