相关疑难解决方法(0)

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

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

post_save.connect(callback_function_postsave, sender=Media)
Run Code Online (Sandbox Code Playgroud)

我理所当然地知道我应该使用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
Run Code Online (Sandbox Code Playgroud)

然而,它必须得到old_value进入post_signal,因为基于它,我必须决定是否进行第三方API呼叫.我无法进行api调用,pre_save因为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"
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来实现这一目标.

python django signals

5
推荐指数
1
解决办法
2980
查看次数

标签 统计

django ×1

python ×1

signals ×1