Это о Google App Engine ndb. Согласно моим наблюдениям, если я создаю объект без предоставления какого-либо ключа, у объекта будет целое число, начинающееся с 1 и инкрементное, в поле ID
, как показано в Datastore Viewer. Однако, если я создаю объект, предоставив строку как свой id, объект будет иметь строку в поле Key Name
. Например:
Модель:
class Member(ndb.Model):
...
Программа:
member1 = Member() # --> ID is 1, Key Name is None
member2 = Member(id='abc') # --> ID is empty, Key Name is 'abc'
Кроме того, в html файле, если я использую
<input ... name="id" value={{member1.key.id}} ... />
в качестве параметра для возврата к серверной программе (Python), ни один из следующих двух операторов не будет работать для member1:
Member.get_by_id(self.request.get('id'))
member1 = Member.get_by_id(int(self.request.get('id')))
Однако, следующие html и программные коды:
<input ... name="id" value={{member2.key.id}} ... />
member2 = Member.get_by_id(self.request.get('id'))
будет работать для member2.
Кажется, нет проблем для объектов, созданных посредством предоставления идентификатора строки (то есть, member2). Но то же самое не работает для member1. Мои вопросы: а) Правильны ли мои наблюдения? б) Как получить член1 с помощью get_by_id()
?