我正在尝试创建像学生和科目一样的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
如何实现这一点,网上是否有任何工作示例。很抱歉,如果它是重复的问题,但我尝试用我有限的技能搜索此论坛。
答案 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。这个例子非常清晰,易于理解。