0

dbクラスを持つ私のアプリ、

class invoice(db.Model):
   location_code = db.StringProperty()
   invoice_no = db.IntegerProperty()
   product_tax_rate = db.FloatProperty()
   basic_tax_rate = db.FloatProperty()
   addl_tax_rate = db.FloatProperty()
   .
   .
   .

これで、addl_tax_rateの値が0の場合、プロパティbasic_tax_rateのプロパティのデフォルト値としてproduct_tax_rateの値を設定したかったのです。

このクラス メソッドにこのロジックのジェネリック プロシージャを追加するにはどうすればよいですか?

この要件をまだ満たしていない場合はお知らせください。

4

3 に答える 3

2

NDB とComputedPropertyを使用して、次のようなことを行うことができます。

class invoice(ndb.Model):
   product_tax_rate = ndb.ComputedProperty(lambda self: self.basic_tax_rate if self.addl_tax_rate == 0 else ???)
   basic_tax_rate = ndb.FloatProperty()
   addl_tax_rate = ndb.FloatProperty()
于 2012-10-06T09:50:49.137 に答える
1

モデル フックを使用できます: https://developers.google.com/appengine/docs/python/ndb/entities#hooks

フックを定義することにより、アプリケーションはある種の操作の前後にコードを実行できます。たとえば、モデルはすべての get() の前に何らかの関数を実行する場合があります。

したがって、addl_tax_rate が 0 の場合、モデルがデータストアに配置されるときにそれに応じて値を設定するロジックが必要になります。何かのようなもの:

def _pre_put_hook(self):
if self.addl_tax_rate == 0:
    self.basic_tax_rate = self.product_tax_rate

そのコードはテストされていません。

于 2012-10-06T09:47:10.357 に答える
0

エンティティの新しいインスタンスを作成するコードで手動で行うだけです。または、コンストラクターをオーバーライドします (ただし、これは、デバッグの謎を解き明かすだけのように思えます)。

于 2012-10-07T04:25:35.000 に答える