Создайте запрос GQL (для Google App Engine), содержащий условие ReferenceProperty.
-
21-08-2019 - |
Вопрос
Скажем, у меня есть следующая модель:
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)
Допустим, у меня есть объект Station, хранящийся в переменной var. foo
.
Как составить запрос GQL, который возвращает все объекты расписания со ссылкой на объект станции, на который ссылается foo
?
Это мое лучшее (хоть и неправильный) попытаемся сформировать такой запрос:
myQuery = "SELECT * FROM Schedule where station = " + str(foo.key())
Снова foo
это Станция объект
Решение
Не следует вставлять пользовательские данные в строку GQL с помощью подстановки строк.GQL поддерживает замену параметров, поэтому вы можете сделать это:
db.GqlQuery("SELECT * FROM Schedule WHERE station = $1", foo.key())
или, используя интерфейс запроса:
Schedule.all().filter("station =", foo.key())
Другие советы
Еще проще — изменить определение модели, добавив поле «collection_name» в ReferenceProperty:
станция = db.ReferenceProperty(Station, require=True, Collection_name="расписания")
Тогда вы можете просто сделать:
foo.schedules
всякий раз, когда вы хотите получить расписание всех станций.