1

映画データストアがあり、そこにある各レコードには、以下のようなキー名として独自の ID があります。

12345
32453
12154
78873
34543

ユーザーがムービーを 1 つずつ閲覧できるようにしたいと考えています。まず、最新の映画が表示されます (データベースにはadded日付と時刻のフィールドがあります)。データストアからそれを取得する方法は? 更新。私は以下のようにそれを行うことができます:

movies = Movies.query()
movies.order(-Movies.added)
for movie in movies.fetch(1):
    self.response.out.write(movie.key.id())

しかし、私はそれが好きではありません - キーを取得するために、レコード全体を要求します。

第 2 に、他の映画 (例: 12154) が表示されている場合、ユーザーは前の映画 (id 32453) と次の映画 (id 78873) に移動できる必要があります。もちろん、最後の映画が表示された場合、次の映画はありません。最初のムービーが表示された場合、前のムービーは表示されません。では、問題は次の映画と前の映画のキー ネームを取得する方法です。 更新。現在表示されている映画が 12154 の場合、example.com/movie/32453前の映画とexample.com/movie/78873次の映画のようなリンクを生成する必要があります。

更新。私は以下のようなものを試しました:

next_movie = Movies.query(Movies.added < movie.added)
next_movie = next_movie.order(-Movies.added)
next_movie = next_movie.get()
if next_movie:
    next_url = next_movie.key.id()
else:
    next_url = ''

prev_movie = Movies.query(Movies.added > movie.added)
prev_movie = prev_movie.order(-Movies.added)
prev_movie = prev_movie.get()
if prev_movie:
    prev_url = prev_movie.key.id()
else:
    prev_url = ''

しかし、うまくいきません...next_url大丈夫なようですが、prev_urlいつも同じです。これが私のテストデータベースの内容です(-Movies.added注文):

id      added
503035: 2012-08-05 19:49:51.259000
475537: 2012-08-05 19:49:51.238000
677539: 2012-08-05 19:49:51.218000
566355: 2012-08-05 19:49:51.197000
557850: 2012-08-05 19:49:51.176000
670146: 2012-08-05 19:49:51.155000
581030: 2012-08-05 19:49:51.135000
464561: 2012-08-05 19:49:51.114000
507817: 2012-08-05 19:49:51.092000
4

2 に答える 2

2

最初に、映画がデータベースに挿入されたときに提出された日付など、「遅延」を表す映画エンティティのプロパティが必要です。

次に、このフィールドで降順ソートのクエリを使用する必要があります。

次/前にスキップするには、Query Cursorsを使用する必要があります。

于 2012-08-06T06:26:06.387 に答える
1

次のコードが適切に機能します。

next_movie = Movies.query(Movies.added < movie.added)
next_movie = next_movie.order(-Movies.added)
next_movie = next_movie.get(keys_only = True)
if next_movie:
    next_url = next_movie.id()
else:
    next_url = ''

prev_movie = Movies.query(Movies.added > movie.added)
prev_movie = prev_movie.order(Movies.added)
prev_movie = prev_movie.get(keys_only = True)
if prev_movie:
    prev_url = prev_movie.id()
else:
    prev_url = ''
return next_url, prev_url
于 2012-08-07T17:33:37.920 に答える