【发布时间】:2014-12-25 07:13:26
【问题描述】:
我是 Django 和 Python 的新手,我想做一些我以前在 Java EE 中经常做的事情。
考虑以下模型(仅相关类):
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,则将SaleDetail.unit_price 更新为Item.default_price。
我过去在 Java POJO 中所做的是将这个逻辑包含在 setter 方法中。我尝试使用 python 属性来封装 item 属性,但是 Django 直接在后台更新了该字段,因此这会破坏一些自动功能。
我也尝试子类化 ForeignKey 以接受回调函数,但我找不到在容器类上调用方法的方法。
我想这样做,以便为 UI 提供默认值,但我不想在视图逻辑中包含此逻辑,因为从概念上讲,我认为此逻辑应该在模型上(服务器端)
这种情况下的其他用途是更新每个销售细节和销售的总计。我想在用户决定保存销售之前计算这个,所以保存信号不起作用。
谢谢!
【问题讨论】:
标签: python django orm model field