【发布时间】:2012-08-07 10:14:39
【问题描述】:
我在 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"
有没有更好的方法来实现这一点。
【问题讨论】:
-
你是怎么解决的?