gpt4 book ai didi

python - 获取 post_save 信号中字段的先前值

转载 作者:太空狗 更新时间:2023-10-30 02:33:47 24 4
gpt4 key购买 nike

我在 django 中有一个 post 信号,我需要在其中访问一个字段的先前值:

post_save.connect(callback_function_postsave, sender=Media)

我知道理想情况下我应该为此使用 pre_save:

pre_save.connect(callback_function_presave, sender=Media)

def callback_function_presave(sender, instance,*args,**kwargs):
try:
old_value = sender.objects.get(pk=instance.pk).field
except sender.DoesNotExist:
return

但是,必须在 post_signal 中获取 old_value,因为基于它,我必须决定是否进行第 3 方 api 调用。我无法在 pre_save 中进行 api 调用,因为 api 使用相同的数据库并期望提交更新的值。

我能想到的一种可能的方法是将 old_value 添加到实例本身,然后可以通过 post_save 访问它:

def callback_function_presave(sender, instance,*args,**kwargs):
try:
instance.old_value = sender.objects.get(pk=instance.pk).field
except sender.DoesNotExist:
return

def callback_function_postsave(sender, instance,*args,**kwargs):
try:
old_value = instance.old_value
except:
print "This is a new entry"

有没有更好的方法来实现这一点。

最佳答案

不幸的是 post_save 信号没有给你旧值 ( post_save )。因此,将旧值存储在模型上似乎是一个很好的解决方案。

我会这样写 pre_save:

def save_old_value(sender, instance, *args, **kwargs):
if instance.id:
instance.old_value = instance.__class__.objects.get(id=instance.id).old_value

关于python - 获取 post_save 信号中字段的先前值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11843747/

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