2011-10-31 58 views
1

我有這個類在python谷歌應用程序引擎:如何設置關鍵屬性?

class Book(db.Model): 
    name = db.StringProperty() 
    belongsTo = db.Key() 

我的問題是,我該如何創建一個密鑰對象,比如我想說的是,它屬於關聯人ID爲1,我試過,但它不工作

b = foo.Book(name="foo book", belongsTo="1") 
b.put() 

我也試圖做

belongsTo = key(1) 

我怎樣才能插入一個外鍵?

+0

'db.Key'不是屬性類 - 因此,這將不行。你可以放在模型上的唯一有效的東西是屬性類,例如Moishe建議的'db.ReferenceProperty'。 –

回答

3

而不是使用任意鍵()(除非真的是你想要的)的,定義你的書模型,使其顯式地引用一個人,像這樣(與一個假裝Person類爲清楚起見)

class Person(db.Model): 
    name = db.StringProperty() 

class Book(db.Model): 
    name = db.StringProperty() 
    belongsTo = db.ReferenceProperty(Person) 

那麼你可以做的東西,如:

book = Book.get(book_key) 
owner_name = book.belongsTo.name 

person = Person.get(person_key) 
books_owned_by_person = person.book_set.get() 

Types and Property Classes App Engine文檔。

1

從Moishe的回答以模型:

class Person(db.Model): 
    name = db.StringProperty() 

class Book(db.Model): 
    name = db.StringProperty() 
    belongsTo = db.ReferenceProperty(Person) 

這是你如何分配外鍵PersonBook

person_key = db.Key.from_path('Person', '1') # '1' is key name of person 

book = Book(name = 'foo book', belongsTo = person_key)