2010-12-03 11 views
1

hereの説明に従いました。Googleアプリケーションエンジンの多対多リレーションシップモデリング

from google.appengine.api import users 
from google.appengine.ext import db 


class Book(db.Model): 
    title = db.StringProperty() 

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

class BookAuthor(db.Model): 
    book = db.ReferenceProperty(Book, required=True, collection_name='books') 
    author = db.ReferenceProperty(Author, required=True, collection_name='authors') 

b = Book(title="My Book") 
a = Author(name="Author of My Book") 

db.put([b, a]) 

ba = BookAuthor(book=b, author=a) 
ba.put() 

b.authors 
a.books 

と私ははAttributeErrorを得る:ここに私のコードは「ブック」オブジェクトが無属性の著者の

答えて

2

ReferencePropertiesを持って参照されるクラスに属性としてquery-objectsを追加します。だからあなたのマッピングを注意深く見:

class BookAuthor(db.Model): 
    # This adds a query-object as an attribute named 'books' to Book entities. 
    book = db.ReferenceProperty(Book, required=True, collection_name='books') 
    # This adds a query-object as an attribute named 'authors' to Author entities. 
    author = db.ReferenceProperty(Author, required=True, collection_name='authors') 

をあなたのコードでは:

b = Book(title="My Book") 
a = Author(name="Author of My Book") 

ので、bは、authorsbooks属性を持っていないでしょう。また、aにはauthorsという属性があり、booksではありません。

コレクション名を変更する場合は、コードを実行する必要があります。

class BookAuthor(db.Model): 
    # This adds a query-object as an attribute named 'authors' to Book entities. 
    book = db.ReferenceProperty(Book, required=True, collection_name='authors') 
    # This adds a query-object as an attribute named 'books' to Author entities. 
    author = db.ReferenceProperty(Author, required=True, collection_name='books') 

はまた、 BookAuthor場合は、追加のプロパティを持っているあなたは、参照資料に記載のリスト・オブ・キー方法を見て確認していません。

+0

優秀!どうもありがとうございました。 – marco

関連する問題