Есть ли способ иметь key_name и id одновременно для сущности хранилища данных GAE? - PullRequest
1 голос
/ 24 октября 2011

В дополнение к key_name, который я генерирую, я также хотел бы иметь другое свойство, которое будет действовать как идентификатор (я не хочу показывать key_name пользователю).Это может быть id?Или как сгенерировать уникальное значение вместо id?

Что я буду делать - я сгенерирую URL с использованием этого идентификатора и имени родительского ключа.Если пользователь нажимает на эту ссылку, мне нужно найти эту сущность хранилища данных и обновить ее.

Вот текущий код.

Создание записи:

  item = Items.get_by_key_name(key_names=user_id, parent=person)
  if item is None:
    item = Items(key_name='id'+user_id, parent=person)

Получение записи:

item = Items.get_by_key_name(key_names=user_id, parent=person)

user_id - это то, что должно быть скрыто.

Ответы [ 2 ]

3 голосов
/ 25 октября 2011

У сущностей есть только одно из имени ключа или идентификатора, но не оба одновременно.Вы можете создать сущность с единственным ReferenceProperty, указывающим на вашу целевую сущность, и использовать его ID в качестве идентификатора, но на самом деле не должно быть никаких причин не раскрывать имя ключа пользователю - хорошо написанное приложение не должно полагаться на это значениеоставшийся секрет.

Обратите внимание, что тривиально легко извлечь имя ключа (и остальную информацию о ключе) из ключа, закодированного в виде строки.

3 голосов
/ 25 октября 2011

Возможно, я ошибаюсь, потому что ваши требования не ясны, но для меня вы должны передать только ключ к представлению, используя:

item.key()

тогда вы можете передать ключ обратно контроллеру и легко получить заданный объект с помощью:

item = Items.get(key)
...