0

私のアプリケーションでは、投票と問題に個別のデータストアを使用して、問題に投票するユーザーがいます。ユーザーが投票する (または元の投票を変更する) たびに、賛成票と反対票の合計を更新したいと考えていますVote.Method。これを行うには、次のトランザクションがあります。

@ndb.transactional
def GetToChange(vote):
    key = ndb.Key('Issue', vote.IID)
    issue = key.get()
    return issue

次に、@Vote.Methodトランザクション関数を呼び出します。

@Vote.method(request_fields=('UID', 'IID', 'Vote'), name='vote.add', path ='addvote')
def AddVote(self, vote):
   vote.put()
   i = GetToChange(vote)
   if newvote.Vote == True:
      i.UpTotal += 1
   if newvote.Vote == False:
      i.DownTotal += 1
   i.put()
   return vote

ただし、これにより常に 503 エラーが発生し、ログに「NoneType i has no attribute UpTotal」が表示されます。これは、エンティティが取得されていないことを示しています。私は何を間違っていますか?

編集: 詳細 これ@Vote.method は、リクエストでユーザー ID (UID)、問題 ID (問題データストアの問題の ID)、およびブール値の「投票」を受け取ります。投票は、vote.put() で保存されます。次に、トランザクション メソッドを呼び出して、リクエストから IID を使用して問題を取得します。この問題で何をしようとしているのかを示すために、コードにさらに追加しました。

4

1 に答える 1

0

よし、並べた!問題は、Vote モデルで使用していた IID プロパティに関係していたため、正しい問題を取得できませんでした。

投票モデルでは、IID を に変更しましたndb.KeyProperty(kind=Issue)。ただし、データストアから整数 ID を使用しようとしてもうまくいきませんでした。上でコメントしたように、これはProtocolBufferDecodeError "corrupted". ただし、リクエストで 64 ビットのエンティティ キーを渡すと機能します。そのため、API は問題で entityKey ヘルパー プロパティを使用するようになりました。

于 2013-07-20T10:46:55.300 に答える