Cómo establecer una propiedad ndb keyProperty

Tengo algunos problemas para entender cómo funcionan las entidades y las claves en Google App Engine NDB.

Tengo una entidad de post y una entidad de user . ¿Cómo configuro el user_key en post al user ?

En la consola interactiva, tengo esto hasta ahora:

 from google.appengine.ext import ndb from app.lib.posts import Post from app.lib.users import User from random import shuffle users = User.query() posts = Post.query().fetch() for post in posts: post.user_key = shuffle(users)[0] post.put() 

Solo estoy tratando de configurar algunos datos semilla para el desarrollo. Sé que probablemente esta no sea la forma ideal de configurar las cosas, pero mi primera pregunta es:

  1. ¿Cómo obtengo una clave de una entidad (el reverso se describe en los documentos)?
  2. ¿Cómo configuro las asociaciones en ndb?

tratar:

 post.user_key = shuffle(users)[0].key 

Tal vez esto ayude a entender el NDB. Tuve las mismas preguntas contigo.

 class Person(ndb.Expando): pass class Favourite(ndb.Expando): pass class Picture(ndb.Expando): pass person = Person() person.put() picture = Picture() picture.put() fav = Favourite(parent=person.key, person=person.key, picture=picture.key ) fav.put() 
  1. Verifique que Shuffle funcione en este caso, ya que User.query () devuelve un iter, no una lista. (Puede convertirlo a una lista usando el orden aleatorio ([x para x en usuarios]). Cuidado, esta lista podría estar muy extendida.
  2. NDB tiene algún comportamiento realmente conectado a veces, por lo que te recomiendo que no guardes una clave NDB, pero su cadena serializada, que también es compatible con ext.db: post.user_key = shuffle ([x para x en users]) .key. urlsafe ()
  3. Podrías usar KeyProperty para asociaciones. Si necesita un control más preciso sobre sus relaciones, debe implementarlas usted mismo. Consulte https://developers.google.com/appengine/docs/python/ndb/properties#structured