Возможно, вам не нужно слишком беспокоиться об этом, остро ... посмотрите на эти модели:
class Venue(base.NamedEntity, HasPerformances, HasUrl, HasLocation):
city = db.ReferenceProperty(City, collection_name='venues')
url = db.StringProperty(required=True, validator=validators.validate_url)
location = db.GeoPtProperty()
class Performance(base.Entity):
show = db.ReferenceProperty(Show, collection_name='performances', required=True)
utc_date_time = db.DateTimeProperty(required=True)
venue = db.ReferenceProperty(Venue, collection_name='performances', required=True)
В таком случае ничто не мешает вам использовать venue.performances
из кода или шаблонов и рассматривать его как список. API будет автоматически запускать запросы по мере необходимости для извлечения реальных объектов. То же самое относится и к performance.venue
.
Единственная проблема здесь - производительность - у вас есть вариант проблемы n + 1 для решения. Однако есть обходные пути, например эта статья Ника Джонсона. Я бы посоветовал также прочитать код API ... это интересно для того, чтобы узнать, как получить и получить разыменование свойства.