NDB中的一对多示例

时间:2012-04-09 17:43:45

标签: 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)

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

如何实现这一点,网上是否有任何工作示例。很抱歉,如果它是重复的问题,但我尝试用我有限的技能搜索此论坛。

4 个答案:

答案 0 :(得分:7)

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

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

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

模板:

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

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)

答案 1 :(得分:1)

将主题用作关键字。

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

答案 2 :(得分:1)

定义:

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

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

用法:

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

答案 3 :(得分:0)

这看起来像一个老问题。如果其他人目前需要此功能,您应该查看Structured Properties https://developers.google.com/appengine/docs/python/ndb/properties#structured。这个例子非常清晰,易于理解。