У меня есть почтовый сигнал в django, где мне нужно получить доступ к предыдущему значению поля:
post_save.connect(callback_function_postsave, sender=Media)
Я знаю, что в идеале я должен использовать предварительное сохранение _для этого :
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
. Тем не менее, крайне важно получить old_value
в post_signal
, потому что на его основе я должен решить, делать ли вызов стороннего API или нет. Я не могу сделать вызов API в pre_save
, так как API использует ту же базу данных и ожидает обновленное зафиксированное значение.
Один из возможных способов, который я могу придумать, — это добавить старое значение _к самому экземпляру, к которому затем можно получить доступ по почте _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"
Есть ли лучший способ добиться этого.