Cercando di sfruttare la maggior parte del concetto di entità GAE di Datastore, ma alcuni dubbi mi forzano la testa.
Dire che ho il modello:
class User(ndb.Model):
email = ndb.StringProperty(indexed=True)
password = ndb.StringProperty(indexed=False)
first_name = ndb.StringProperty(indexed=False)
last_name = ndb.StringProperty(indexed=False)
created_at = ndb.DateTimeProperty(auto_now_add=True)
@classmethod
def key(cls, email):
return ndb.Key(User, email)
@classmethod
def Add(cls, email, password, first_name, last_name):
user = User(parent=cls.key(email),
email=email,
password=password,
first_name=first_name,
last_name=last_name)
user.put()
UserLogin.Record(email)
class UserLogin(ndb.Model):
time = ndb.DateTimeProperty(auto_now_add=True)
@classmethod
def Record(cls, user_email):
login = UserLogin(parent=User.key(user_email))
login.put()
E ho bisogno di tenere traccia dei tempi di operazioni di login di successo. Ogni volta che l'utente effettua l'accesso, verrà eseguito un metodo UserLogin.Record()
. Ora la domanda - lo faccio bene?
Grazie.
MODIFICA 2
Ok, ho usato gli argomenti digitati, ma poi ha generato questo: Expected Key instance, got User(key=Key('User', 5418393301680128), created_at=datetime.datetime(2013, 6, 27, 10, 12, 25, 479928), email=u'[email protected]', first_name=u'First', last_name=u'Last', password=u'password')
. È chiaro da capire, ma non capisco perché i documenti siano fuorvianti? Propongono implicitamente di usare:
# Set Employee as Address entity's parent directly...
address = Address(parent=employee)
Ma il modello si aspetta la chiave. E la cosa peggiore è che parent=user.key()
giura che key()
non è callable. E ho scoperto che user.key
funziona.
MODIFICA 1
Dopo aver letto l' esempio dai documenti e provato a replicarlo - ho ottenuto errore di tipo: %codice%. Questo è il codice exacto utilizzato:
user = User('[email protected]', 'password', 'First', 'Last')
user.put()
stamp = UserLogin(parent=user)
stamp.put()
Capisco che Model abbia avuto l'argomento sbagliato, MA perché è nella documentazione?