2010-12-03 48 views
1

J'ai suivi ce qui est décrit here. Voici mon code:Modélisation de relation many-to-many dans google app engine

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 

et je reçois AttributeError: objet « Livre » n'a pas d'attribut « auteurs »

Répondre

2

ReferenceProperties ajouter query-objects sous forme d'attributs à la classe référencée. Regardez donc attentivement vos applications:

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

Dans votre code:

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

Ainsi, b aurait un attribut books, pas authors. Et, a aurait un attribut authors, pas books.

Si vous modifiez les noms de collection, votre code doit s'exécuter.

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

En outre, si BookAuthor n'a pas de propriétés supplémentaires, assurez-vous que vous regardez la liste des touches-méthode décrite dans l'article que vous avez mentionné.

+0

excellent! Merci beaucoup. – marco