Создайте запрос GQL (для Google App Engine), который имеет условие на ReferenceProperty - PullRequest
5 голосов
/ 12 мая 2009

Скажите, у меня есть следующая модель:

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, хранящийся в переменной foo.

Как собрать GQL-запрос, который возвращает все объекты Schedule со ссылкой на объект Station, на который ссылается foo?

Это моя лучшая (хотя и неверная ) попытка сформировать такой запрос:

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

Еще раз foo - это Станция объект

Ответы [ 2 ]

10 голосов
/ 13 мая 2009

Вы не должны вставлять пользовательские данные в строку GQL, используя подстановку строк. GQL поддерживает подстановку параметров, поэтому вы можете сделать это:

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

или, используя интерфейс запроса:

Schedule.all().filter("station =", foo.key())
7 голосов
/ 24 ноября 2009

Еще проще - изменить определение модели, добавив поле 'collection_name' в ReferenceProperty:

station = db.ReferenceProperty (Station, обязательно = True, collection_name = "schedule")

Тогда вы можете просто сделать:

foo.schedules

всякий раз, когда вы хотите получить расписание всех станций.

...