我是Django和Python的新手,我想做一些我经常在Java EE中执行的操作。Django - 基于其他字段的更新模型字段
考虑下面的模型(只有相关的类):
class Item(models.Model):
name = models.CharField(max_length=40)
default_price = models.DecimalField(max_digits=6, decimal_places=2, default=50)
def __unicode__(self):
return self.name
class SaleDetail(models.Model):
item = models.ForeignKey(Item)
deposit = models.ForeignKey(Deposit)
quantity = models.PositiveIntegerField()
unit_price = models.DecimalField(max_digits=6, decimal_places=2)
sale = models.ForeignKey(Sale)
def item_updated(self, value):
if self.unit_price == None:
self.unit_price = value
我想要做的是,每一个Item
添加到SaleDetail
时间,更新SaleDetail.unit_price
与Item.default_price
如果SaleDetail
是新的或没有unit_price
设置。
我以前在Java POJO中做的事情是将这个逻辑包含在setter方法中。我试过使用python属性来封装item
属性,但是Django直接在引擎盖下更新字段,所以这会破坏一些自动功能。我也尝试了继承ForeignKey接受回调函数,但我找不到方法来调用容器类的方法。
我想这样做,所以我可以提供用户界面默认的,但我不想在视图中包括逻辑这个逻辑,因为在概念上我觉得这个逻辑应该在模型上(服务器端)
这种情况下的其他用途是更新每个销售细节和销售的总计。我想在用户决定保存销售之前计算这个值,因此保存信号将不起作用。
谢谢!
现在我有了更多的经验,我可以看到我在django生态系统中做的没有意义,但是因为这正确回答了我的问题,所以我接受了答案。谢谢! – 2015-08-21 09:31:59