我遵循了概述here的内容。这是我的代码:
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:'Book'对象没有属性'authors'
答案 0 :(得分: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
将具有books
属性,而不是authors
。而且,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
没有其他属性,请务必查看您引用的文章中列出的list-of-keys方法。