2010-01-18 1 views
1

Я проектирую систему подачи для пользователей.Google App Engine db.key() question/User-Feed model

так что я:

class User(db.Model): 
    name = db.StringProperty() 
    list_of_keys = db.StringListProperty() 

class Feed(db.Model): 
    event = db.StringProperty() 
    timestamp = db.DateTimeProperty() 

# I created 10 feed entities 

# assuming i already have my 10 feed entities, I take their keys and put into this list 
list_of_keys = ["key1","key2","key3",.........."key10"] 

, если я использую

db.key(list_of_keys) 

Я получаю все объекты. без проблем. Таким образом, он работает, когда присутствуют все ключи (т. Е. Работает, если объекты все еще находятся в хранилище данных).

Но если я удалю хотя бы одно из объектов, то db.key() возвращает NoneType.

любые предложения о том, как это сделать?

PS: я пытаюсь избегать использования ReferenceProperty в моей системе подачи, потому что я думаю, что это может запутаться

, если вы по-прежнему свидетельствуют о том, что я использую ReferenceProperty, вот моя цель (ы):
1 Каждый объект передачи должен «принадлежать» нескольким пользователям.
2. У каждого пользователя может быть до 20 каналов макс.
3. Новые каналы будут заменять старые на основе метки времени.

хотел бы услышать ваши мысли/решения.

ответ

2

Предполагая, что у вас есть строки, которые кодируют фактические ключи (в отличие от только наименования ключей или что-то еще раз), сначала список строк (что вы так странно и непоследовательно выбрать вместо того, чтобы позвонить список ключей хотя это явно и очевидно список строк вместо) обратно в список Key с:

thekeysforreal = [db.Key(k) for k in list_of_keys] 

Теперь db.get(thekeysforreal) будет выполнять свою работу, за the docs:

Если указан список ключей, возвращаемое значение представляет собой соответствующий список экземпляров модели , без значений , если для соответствующий ключ не существует.

+0

я сделал это, все еще не сработал. Я все еще получаю ошибку Nonetype, когда одна из сущностей была удалена. (хотя ключевая строка все еще существует в моем списке) – fooyee