gpt4 book ai didi

python - 使用 post_save 而不是 pre_save 信号检测字段变化

转载 作者:行者123 更新时间:2023-12-01 02:43:34 24 4
gpt4 key购买 nike

当一个字段发生变化时,我需要执行一些操作。

由于此操作需要使用已保存的对象,因此我无法像这样使用 pre_save 信号:

@receiver(pre_save, sender=reservation_models.Reservation)
def generate_possible_pairs(sender, instance, **kwargs):
try:
reservation_old = sender.objects.get(pk=instance.pk)
except sender.DoesNotExist:
pass # Object is new, so field hasn't technically changed, but you may want to do something else here.
else:
if not reservation_old.datetime == instance.datetime: # Field has changed
do_something(instance) # It would be better to be sure instance has been saved

是否可以使用 post_save 信号来实现此目的?

我想避免向此模型添加临时属性。

最佳答案

使用 post_save 信号,您将无法从数据库检索以前的状态 - 但为什么要使用信号呢?

class Reservation(models.Model):
def save(self, *args, **kw):
old = type(self).objects.get(pk=self.pk) if self.pk else None
super(Reservation, self).save(*args, **kw)
if old and old.datetime != self.datetime: # Field has changed
do_something(self)

您可能还想阅读此内容:https://lincolnloop.com/blog/django-anti-patterns-signals/

关于python - 使用 post_save 而不是 pre_save 信号检测字段变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45436960/

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