7

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

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

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

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

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

4

4 回答 4

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)
于 2015-01-20T13:40:24.393 回答
1

使用主题作为关键。

me = Student(key_name='KurzedMetal')
programming = Subject(key_name='Programming')
programming.put()
me.subject = programming.key()
me.put()
于 2012-04-09T17:55:02.630 回答
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()
于 2016-04-03T21:47:50.000 回答
0

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

于 2012-12-18T17:34:59.630 回答