在NDB

2012-04-09 37 views
7

一個一對多的例子中,我想創建學生和學科在NDB

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

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

一個學生可以有很多主題ndb.Model類。如何在這個模型中添加和存儲這些。我找不到任何例子。對於字符串屬性..有字段屬性,即重複=真

如何實現這一點,並在網上有任何工作的例子。對不起,如果它是重複的問題,但我試圖用我有限的技能來搜索這個論壇。

+3

解決。新增模型爲: '主題= ndb.KeyProperty(一種=主題,重複= TRUE)' ,然後加入method..in Student對象時,只需添加 STD =學生() SUB1 =主題() SUB2 =主題() sub1.put() sub2.put() std.subject.append(SUB1) std.subject.append(SUB2) std.put() – Anjana 2012-04-11 05:14:26

+0

你知道,如果有一種方法可以使用bulkloader導入轉換上傳重複的屬性? – mehulkar 2013-01-15 09:23:14

+0

Anjana在你的修正評論中,是不是應該做std.subject.append(sub2.key())? – Milwaukoholic 2014-12-15 18:11:51

回答

1

將主題用作關鍵字。

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

一個警告,要得到你應該使用key()的name()方法的名字(例如:「me.key()。name ()「),如果需要,可以添加一個構造函數以將key_name保存到name屬性。 – KurzedMetal 2012-04-09 17:57:12

+0

謝謝KurzedMetal。欣賞它。我正在尋找的是如果有多個科目與學生相關聯。即如果學生與**編程**和** DBMS **以及許多其他相關聯。你怎麼能做到這一點? – Anjana 2012-04-10 04:13:34

0

這看起來像一個老問題。如果別人現在需要這個,你應該看看Structured Propertieshttps://developers.google.com/appengine/docs/python/ndb/properties#structured。這個例子非常清晰,易於遵循。

+2

結構化屬性不會填充一對多關係的確切角色,因爲您無法將地址(在該示例中)與其他任何內容關聯。 – zigdon 2013-08-04 15:33:14

+1

這只是強制執行一個屬性的結構,它不會創建一個一對多的關係。 – foundatron 2015-01-25 16:21:41

8

當我需要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

定義:

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()