2011-01-05 7 views
1
class Config(db.Model): 

    Latest = db.IntegerProperty() 

    class New(webapp.RequestHandler): 
     def get(self): 
      config = Config() 
      Last = Config.Latest 
      t = Last + 1 

戻りGoogle App EngineのPythonがやろうとして何イム

t = LastUUID + ADDNUM 
TypeError: unsupported operand type(s) for +: 'IntegerProperty' and 'Int' 

を追加するデータストアとアプリ1からそれにint型を取得することです。次に、データストア内のintを再割り当てします。なぜ私はこれらのエラーを投げているのか分からない。私もt = int(Last +1)を試しました。 更新:これは私が必要としたもので、私の問題を解決しました。あなたが探しているhttp://code.google.com/appengine/articles/sharding_counters.html

+0

'long(Last + 1)'を試してみませんか? – marcog

+2

整数はPythonでlongに自動的に昇格されます。そして、それはエラーとは関係ありません。 – Falmarri

+0

あなたは何を達成しようとしていますか? Thomasによって指摘されたエラーを除いて、グローバルカウンタを使用しようとするのは通常、App Engine(または他の分散システム)では悪い考えです。 –

答えて

0

構文は

t = int(Last) +1

あるしかし、私はそれはあなたが何をしたいですか分かりません。私はdjangoやこれがどんなフレームワークなのかわからないので、言うことは難しいです。しかし、Pythonでは、型を追加するには型が互換でなければなりません。

+0

数字には当てはまりません。 '0.1 + 2'はうまく追加されます。 – badp

+0

私は互換性のあるタイプを言った。 floatとintは互換性があります。 – Falmarri

3

必要な変更は、1行を調整する以外の方法です。

Config()インスタンスを作成し、Latestに初期値(1や0など)を割り当ててデータストアに格納する初期化関数が必要です。

次に、適切なConfigインスタンスを取得するために、RequestHandlerをexecute a queryにする必要があります。最後に、Latestを更新し、インスタンスを再度データストアに保存します。

+1

これは正しいです。実際、それはまだ投稿されている唯一の完全かつ正解なので、なぜ投票されたのか分かりません。 –

+0

それは完全に間違っているからです。初期化関数は必要ありません。クエリを実行したり、データストアからオブジェクトを要求したりする必要はなく、インスタンスを再保存する必要はありません。あなたがする必要があるのは、単一行を微調整することだけです。コードは書かれたとおりに動作します。 –

+0

@Chris:それは簡単な調整で動くかもしれませんが、ポスターが何をしようとしているかを達成することはできません。質問は具体的には、データストアから数値を取得し、それを追加してデータストアに戻すことについて説明します。 –

1

これはGoogle App EngineやDjangoとは関係ありません。次のコードでは、

class X(object): 
    @property 
    def y(self): 
     return 5 

x = X() 
print X.y + 5 

...同じエラーが発生します。 X.yは、クラスオブジェクトのバインドされていないプロパティを参照します。 x.yはバインドされたプロパティを参照し、実際には上記の例ではprint x.y + 5が "10"を出力します。

行をLast = config.Latestに変更しても問題はありません。 PEP 8、特に「Prescriptive:Naming Conventions」の推奨事項をお勧めします。一般に、PythonクラスではCapWordsを使用する必要がありますが、関数と変数はlowercase_with_underscoresを使用する必要があります。

関連する問題