私のアプリケーションでは、投票と問題に個別のデータストアを使用して、問題に投票するユーザーがいます。ユーザーが投票する (または元の投票を変更する) たびに、賛成票と反対票の合計を更新したいと考えています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 を使用して問題を取得します。この問題で何をしようとしているのかを示すために、コードにさらに追加しました。