私が正しい方法で物事を行っていることを誰かに確認してもらいたいだけです。
私はこの構造を持っています: ページ (祖先 = 章) を持つ章 (祖先 = 本) を持つ本
章を ID で検索するには、祖先クエリで検索する本が必要であることは明らかです。
私の疑問は次のとおりです。ページを検索するには、すべてのチェーンブックチャプターが必要ですか?
例(私はNDBにいます):
class Book(ndb.Model):
# Search by id
@classmethod
def by_id(cls, id):
return Book.get_by_id(long(id))
class Chapter(ndb.Model):
# Search by id
@classmethod
def by_id(cls, id, book):
return Chapter.get_by_id(long(id), parent=book.key)
class Page(ndb.Model):
# Search by id
@classmethod
def by_id(cls, id, chapter):
return Page.get_by_id(long(id), parent=chapter.key)
実際、コンテンツを表示するためにページを検索する必要がある場合、次のように完全なチェーンを URL に渡します。
getPage?bookId=5901353784180736&chapterId=5655612935372800&pageId=1132165198169
したがって、コントローラーでは、次のようにします。
def get(self):
# Get the id parameters
bookId = self.request.get('bookId')
chapterId = self.request.get('chapterId')
pageId = self.request.get('pageId')
if bookId and chapterId and pageId:
# Must be a digit
if bookId.isdigit() and chapterId.isdigit() and pageId.isdigit():
# Get the book
book = Book.by_id(bookId)
if book:
# Get the chapter
chapter = Chapter.by_id(chapterId, book)
if chapter:
# Get the page
page = Page.by_id(pageId, chapter)
これは正しい方法ですか?チェーンの最後の要素を取得するには、常に完全なチェーンを URL に含める必要がありますか?
これが正しければ、NDB を使用するこの作業方法はデータストアに影響を与えないと思います。なぜなら、このページを繰り返し呼び出すと、常に同じ本、章、ページの NDB キャッシュにヒットするからです (なぜなら、私はid によるものであり、fetch コマンドではありません)。私の推測は正しいですか?