问题
I am trying to create ndb.Model class like Students and subjects
class Subject(ndb.Model):
name = ndb.StringProperty()
class Student(ndb.Model):
name = ndb.StringProperty()
subject = ndb.KeyProperty(kind=Subject)
One Student can have many Subjects. How to add and store these in this Model. I could not find any example of it. For String Property .. there is field property i.e. repeat=true
How to achieve this and is there any working example on the web. Sorry if it is duplicate question but I tried with my limited skills to search this forum.
回答1:
When I need 1 to many I use repeated keyProperties. Code:
class Subject(ndb.Model):
name = ndb.StringProperty()
class Student(ndb.Model):
name = ndb.StringProperty()
subjects = ndb.KeyProperty(kind='Subject', repeated=True)
template:
{% for subject in student.subjects %}
{{subject.get().name}}
{% endfor %}
ndb is nosql so you will not find reference to the parent in the child. However, you could add it like that. Don't forget to set student key value when creating a new subject.
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)
回答2:
Use the subject as a key.
me = Student(key_name='KurzedMetal')
programming = Subject(key_name='Programming')
programming.put()
me.subject = programming.key()
me.put()
回答3:
Definition:
class Subject(ndb.Model):
name = ndb.StringProperty()
class Student(ndb.Model):
name = ndb.StringProperty()
subject = ndb.KeyProperty(kind=Subject,repeated=True)
Usage:
subject1 = Subject()
subject1.put()
subject2 = Subject()
subject2.put()
student = Student()
student.subject.append(subject1.key)
student.subject.append(subject2.key)
student.put()
回答4:
This looks like an old question. In case someone else needs this presently, you should look at Structured Properties https://developers.google.com/appengine/docs/python/ndb/properties#structured. The example is very clear and easy to follow.
来源:https://stackoverflow.com/questions/10077300/one-to-many-example-in-ndb