【发布时间】:2017-12-08 17:55:55
【问题描述】:
是否可以检测到 Django 模型中的字段已更改?
class Product(models.Model):
my_current_price = MoneyField(max_digits=20, decimal_places=2, null=True, blank=True,
verbose_name=_('My original price'))
my_eur_price = MoneyField(max_digits=20, decimal_places=2, null=True, blank=True, verbose_name=_('My price in EUR'))
my_usd_price = MoneyField(max_digits=20, decimal_places=2, null=True, blank=True, verbose_name=_('My price in USD'))
问题是,当my_current_price 更改时,我需要随时重新计算欧元和美元价格。
我有两个想法:
以某种方式覆盖
MoneyField并在字段更改时发送信号。覆盖 save 方法并创建一个新属性
__my_current_price就像 here - 这可行,但它使代码对我来说非常不清楚。
编辑: 由于数据库查找速度更快,我以不同的货币存储价格。
【问题讨论】:
-
是的,post_save使用信号,当current_price根据它改变时,其他2个字段将被计算并保存
-
我怎样才能检测到 current_price 已更改?
-
@Exprator 哦,是的,你是说这个答案吗? stackoverflow.com/a/7934958/3371056好像不错。
-
是的,这就是我所说的信号:)
-
虽然这是一个好方法,但我正在考虑使用 pre_save - 可能吗?使用 pre_save,将只有一次提交。我不确定我是否可以访问未在预保存中提交更改的对象。
标签: python django django-models