2012-04-09 11 views
7

Estoy intentando crear la clase ndb.Model como estudiantes y sujetosUno-A-Muchos Ejemplo de NDB

class Subject(ndb.Model): 
    name = ndb.StringProperty() 

class Student(ndb.Model): 
    name = ndb.StringProperty() 
    subject = ndb.KeyProperty(kind=Subject) 

un estudiante puede tener muchos temas. Cómo agregar y almacenar estos en este Modelo. No pude encontrar ningún ejemplo de eso. Para propiedad de cadena ... hay propiedad de campo, es decir, repeat = true

Cómo lograr esto y hay algún ejemplo de trabajo en la web. Lo siento si es una pregunta duplicada, pero he intentado con mis habilidades limitadas para buscar en este foro.

+3

Resuelta. Añadido en el modelo como: 'subject = ndb.KeyProperty (tipo = Asunto, repetida = True)' y luego al añadir el objeto method..in estudiante sólo tiene que añadir std = Estudiantes() = Asunto SUB1() = sub2 Asunto() sub1.put() sub2.put() std.subject.append (SUB1) std.subject.append (SUB2) std.put() – Anjana

+0

¿sabe usted si ¿Hay una manera de cargar propiedades repetidas usando las transformaciones de importación bulkloader? – mehulkar

+0

Anjana en su comentario con la corrección, ¿no se supone que debe hacer std.subject.append (sub2.key())? – Milwaukoholic

Respuesta

1

Utilice el sujeto como clave.

me = Student(key_name='KurzedMetal') 
programming = Subject(key_name='Programming') 
programming.put() 
me.subject = programming.key() 
me.put() 
+0

una advertencia, para obtener el nombre debe usar el método name() de la tecla() (por ejemplo: "me.key(). Name() "), puede agregar un constructor para guardar el nombre_clave a la propiedad del nombre si lo desea. – KurzedMetal

+0

Gracias KurzedMetal. Lo aprecio. Lo que estoy buscando es si hay más de una asignatura con la que el alumno esté asociado. es decir, si el Estudiante está asociado con ** Programación ** y también con ** DBMS ** y muchos otros. ¿Cómo puedes lograr eso? – Anjana

0

Parece una pregunta anterior. En caso de que alguien más lo necesite en este momento, debe consultar Structured Propertieshttps://developers.google.com/appengine/docs/python/ndb/properties#structured. El ejemplo es muy claro y fácil de seguir.

+2

Las propiedades estructuradas no cumplen la función exacta de una relación de 1 a varios, ya que no puede relacionar Direcciones (en ese ejemplo) con ninguna otra cosa. – zigdon

+1

Eso simplemente impone la estructura de una propiedad, no crea una relación de uno a muchos. – foundatron

8

Cuando necesito 1 a muchos utilizo keyProperties repetido. Código:

class Subject(ndb.Model): 
    name = ndb.StringProperty() 

class Student(ndb.Model): 
    name = ndb.StringProperty() 
    subjects = ndb.KeyProperty(kind='Subject', repeated=True) 

plantilla:

{% for subject in student.subjects %} 
    {{subject.get().name}} 
{% endfor %} 

NDB es nosql por lo que no encontrará referencia a los padres en el niño. Sin embargo, podría agregarlo así. No olvide establecer el valor de la clave del alumno al crear un nuevo tema.

class Subject(ndb.Model): 
    name = ndb.StringProperty() 
    student = ndb.KeyProperty(kind='Student') 

class Student(ndb.Model): 
    name = ndb.StringProperty() 
    subjects = ndb.KeyProperty(kind='Subject', repeated=True) 
1

Definición:

class Subject(ndb.Model): 
    name = ndb.StringProperty() 

class Student(ndb.Model): 
    name = ndb.StringProperty() 
    subject = ndb.KeyProperty(kind=Subject,repeated=True) 

Uso:

subject1 = Subject() 
subject1.put() 
subject2 = Subject() 
subject2.put() 
student = Student() 
student.subject.append(subject1.key) 
student.subject.append(subject2.key) 
student.put() 
Cuestiones relacionadas