One-To-Many Example in NDB

后端 未结 4 2000
囚心锁ツ
囚心锁ツ 2021-01-12 08:22

I am trying to create ndb.Model class like Students and subjects

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

class Student(ndb.Model):
    na         


        
相关标签:
4条回答
  • 2021-01-12 09:06

    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()
    
    0 讨论(0)
  • 2021-01-12 09:07

    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.

    0 讨论(0)
  • 2021-01-12 09:08

    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)
    
    0 讨论(0)
  • 2021-01-12 09:14

    Use the subject as a key.

    me = Student(key_name='KurzedMetal')
    programming = Subject(key_name='Programming')
    programming.put()
    me.subject = programming.key()
    me.put()
    
    0 讨论(0)
提交回复
热议问题