2010-12-03 3 views
1

나는 here의 윤곽선을 따랐다. 여기 내 코드입니다 :구글 앱 엔진에서 many-to-many 관계 모델링

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

그래서, bauthorsbooks 속성을하지 않은 것입니다. 그리고 abooks이 아니라 authors 속성을 갖습니다.

컬렉션 이름을 변경하면 코드가 실행됩니다.

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

관련 문제