gpt4 book ai didi

python - 检测 Django 模型中的字段变化

转载 作者:太空宇宙 更新时间:2023-11-04 05:04:15 25 4
gpt4 key购买 nike

是否可以检测到 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 发生变化时,我需要随时重新计算欧元和美元价格。

我有两个想法:

  1. Somehow override MoneyField and send signal when the field is changed.

  2. Override save method and create a new attribute __my_current_price like here - this works but it makes code very unclear for me.

编辑:由于数据库查找速度更快,我以不同的货币存储价格。

最佳答案

一种方法是创建信号并将 instance 与数据库中的对象进行比较。但似乎更好的方法是覆盖 save 方法,这是最佳实践。

def save(self,*args,**kwargs):
old = Model.objects.filter(pk=getattr(self,pk,None)).first()
if old:
if old.attr!=self.attr:
# attr changed
super(Model,self).save(*args,**kwargs)

关于python - 检测 Django 模型中的字段变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44919872/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com