Google App Engine:定义实体的父级

时间:2014-07-19 20:51:23

标签: python google-app-engine google-cloud-datastore app-engine-ndb

我想为书评webapp创建数据存储模型。此网络应用有两种类型 - BookReview

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

class Review(ndb.Model):
    review = ndb.TextProperty()

Review个实体应该是育儿Book实体的子实体。在查看Book实体的页面时,还应查询其Review子实体的列表并显示如下:

Review.query(ancestor=book.key).fetch()

下面的(简化)处理程序将处理新实体的创建:

class NewBook(BaseHandler):
    def get(self):
        self.render('new-book-form.html')

    def post(self):
        title = self.request.get('title')
        b = Book(title = title)
        b.put()

class NewReview(BaseHandler):
    def get(self):
        self.render('new-review-form.html')

    def post(self):
        book_key = self.get_book_key() # gets book entity's key
        review = self.request.get('review')
        r = Review(review = review) # Do I define this entity's parent here?
        r.put()

根据文档,父类被分配在子实体的密钥内:

review = Review(parent=ndbKey(Book, book_id), review = review)

我在NewReview处理程序中的哪个位置定义了这个?我可能会遗漏一些非常明显的东西。

1 个答案:

答案 0 :(得分:0)

你几乎是对的。假设您的get_book_key方法返回实际的ndb.Key个实例,则您评论的行将变为:

r = Review(parent=book_key, review=review)