мое текущее приложение использует db.ListProperty(db.Key)
для связи многих со многими для списка друзей.
У нас есть следующая схема:
# previous models
class User(db.Model):
name = db.StringProperty()
nickname = db.StringProperty()
join_date = db.DateProperty(auto_now_add=True)
party = db.ReferenceProperty(PartyEntry, collection_name='participants')
def by_name(self, string):
return self.gql("WHERE name = :name", name=string).get()
def key_by_name(self, string):
return self.by_name(string).key()
class FriendList(db.Model):
owner = db.ReferenceProperty(User)
friends = db.ListProperty(db.Key)
И обработчик, который выбирает список друзей пользователя., обрабатывает и отображает:
class Profile_FriendList(WebBase):
def get(self):
user = self._auth()
if user:
usr_key = User().key_by_name(user.nickname())
friend_list = friend_lists = FriendList.all().filter('owner', usr_key).fetch(10)
self.renderskeleton( { 'friendlist': friend_list } ,'friends.html')
Я заполнил тестовый список друзей двумя записями списка db.Key () в FriendList.friends.Консоль sc SDK (> Interactive Datastorageviewer) отображает мне эти элементы:
key1,key2
Но если я вызову эту сущность FriendList по ее ключу и выведу вывод frlst.friends: [] Та же проблема в обработчике.У меня нет данных, с которыми я могу работать.НО данные существуют.
Исправлено: Проблема FriendList, вызываемый объект Friendlist не был запросом, это просто новый объект FriendList ().Обновленный код.
Исправлено: полный вопрос решен
usr_key = User().key_by_name(user.nickname())
logging.info(user.nickname())
logging.info(usr_key)
friend_list = FriendList().all().filter("owner", usr_key).fetch(20)
logging.info(friend_list)
logging.info(friend_list[0].friends)
friends = User.get(friend_list[0].friends)
logging.info(friends)
self.renderskeleton( { 'friends': friends } , 'friends.html')
Я выбрал список результатов GqlQuery вместо "одного", который я хочу, что я должен был сделатьоттуда просто помещал список ключей друзей в User.get () и вуаля, у меня были все необходимые данные.