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,我想将product_tax_rate的值设置为属性basic_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 回答