Это работает для меня с текущим DataModel:
taskObject = db.Query(Task).get()
for item in taskObject.tasklabel_set:
item.label.name
Или вы можете удалить класс этикетки и просто сделать отношения один-ко-многим между Task и TaskLabel:
class Task(db.Model):
title = db.StringProperty()
class TaskLabel(db.Model):
task = db.ReferenceProperty(Task)
label = db.StringProperty()
Тогда
taskObject = db.Query(Task).get()
for item in taskObject.tasklabel_set:
item.label
Вот совет от статьи Google по моделированию отношений в данных tore
Определив его как ReferenceProperty, вы создали свойство, которому могут быть присвоены только значения типа «Задача». Каждый раз, когда вы определяете свойство reference, он создает неявное свойство коллекции в ссылочном классе. По умолчанию эта коллекция называется _set. В этом случае он создаст свойство Task.tasklabel_set.
В статье можно найти here.
Я также рекомендую поиграть с этим кодом в интерактивной консоли на сервере приложений.
Возможно, это решение, я думал, что смогу это сделать без –
Ум, если я спрошу, почему? Утилита appengine datastore, похоже, упрощает устранение таблиц соединений, таких как TaskLabel, которые являются общими для РСУБД. – seth
Я вижу, что использование listproperty может быть правильным решением –