我是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