Google App Engine:如何在db.Model类中将属性的默认值设置为另一个属性?

时间:2012-10-06 09:37:53

标签: python django google-app-engine

我的应用程序有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()
   .
   .
   .

在此,我想将 product_tax_rate 的值设置为属性 basic_tax_rate 的属性的默认值,如果 addl_tax_rate 的值为的 0 即可。

如何在此类方法中为此逻辑添加通用过程?

如果您仍未达到此要求,请与我们联系。

3 个答案:

答案 0 :(得分: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()

答案 1 :(得分:1)

您可以使用模型钩子:https://developers.google.com/appengine/docs/python/ndb/entities#hooks

  

通过定义一个钩子,一个应用程序可以在某种类型的操作之前或之后运行一些代码;例如,Model可能会在每个get()之前运行一些函数。

因此,当addl_tax_rate为0时,您只需要一些逻辑,以便在将模型放入数据存储区时相应地设置值。类似的东西:

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

该代码未经过测试。

答案 2 :(得分:0)

只需在创建实体新实例的代码中手动执行。或者覆盖构造函数(但听起来它只是引导你进行更多调试的谜团)。