NDB中的一对多示例

Anj*_*ana 7 google-app-engine app-engine-ndb

我正在尝试创建像学生和科目一样的ndb.Model类

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

class Student(ndb.Model):
    name = ndb.StringProperty()
    subject = ndb.KeyProperty(kind=Subject)
Run Code Online (Sandbox Code Playgroud)

一个学生可以有很多科目.如何在此模型中添加和存储这些内容.我找不到任何例子.对于String Property ..有字段属性,即repeat = true

如何实现这一点,并在网上有任何工作的例子.对不起,如果是重复的问题,但我尝试用我有限的技能来搜索这个论坛.

Cyr*_*ril 7

当我需要1对多时,我使用重复的keyProperties.码:

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

class Student(ndb.Model):
    name = ndb.StringProperty()
    subjects = ndb.KeyProperty(kind='Subject', repeated=True)
Run Code Online (Sandbox Code Playgroud)

模板:

{% for subject in student.subjects %}
  {{subject.get().name}}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

ndb是nosql,因此您将找不到对子项中父项的引用.但是,您可以像这样添加它.创建新主题时,请不要忘记设置学生键值.

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)
Run Code Online (Sandbox Code Playgroud)


Kur*_*tal 1

使用主题作为关键。

me = Student(key_name='KurzedMetal')
programming = Subject(key_name='Programming')
programming.put()
me.subject = programming.key()
me.put()
Run Code Online (Sandbox Code Playgroud)