To dotyczy ndb w Google App Engine. Zgodnie z moimi spostrzeżeniami, jeśli utworzę obiekt bez dostarczania jakiegokolwiek klucza, jednostka będzie miała liczbę całkowitą, zaczynając od 1 i będącą przyrostową, w polu ID
, jak pokazano w Datastore Viewer. Jeśli jednak utworzę obiekt, podając ciąg jako jego identyfikator, jednostka będzie miała łańcuch w polu Key Name
. Na przykład:Ndb wyszukiwarki aplikacji Google: używając identyfikatora lub nazwy klucza?
Model:
class Member(ndb.Model):
...
Program:
member1 = Member() # --> ID is 1, Key Name is None
member2 = Member(id='abc') # --> ID is empty, Key Name is 'abc'
Ponadto w pliku html, jeśli mogę użyć
<input ... name="id" value={{member1.key.id}} ... />
jako parametr aby wrócić do program po stronie serwera (Python), żadna z następujących dwóch instrukcji nie zadziała dla członka 1:
Member.get_by_id(self.request.get('id'))
member1 = Member.get_by_id(int(self.request.get('id')))
Jednakże następujące kody HTML i programowe:
<input ... name="id" value={{member2.key.id}} ... />
member2 = Member.get_by_id(self.request.get('id'))
będą pracować dla member2.
Wydaje się, że nie ma problemu z elementami utworzonymi przez podanie identyfikatorów ciągu (tj. Element2). Ale to samo nie działa dla członka1. Moje pytania: a) Czy moje obserwacje są poprawne? b) Jak mogę pobrać member1 używając get_by_id()
?
Czy pobrane wszystkich Członków i zbadano ich klucze abyście wiedzieli 1. że faktycznie zapisałeś member1 i member2? i –
2. jakie klucze rzeczywiście stworzyłeś –