2011-10-31 41 views
1

私はPythonのGoogleのアプリエンジンでこのクラスを持っている:どのようにキー属性を設定できますか?

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のドキュメント。 Moisheの答えからモデルを撮影

1

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

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

これは、あなたがBookからPerson外部キーを割り当てる方法です:

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

book = Book(name = 'foo book', belongsTo = person_key) 
関連する問題