Django pre_save信号:我怎么知道它是插入还是更新

时间:2016-06-27 15:33:11

标签: python django signals

我正在使用模型的pre_save信号,但我不知道如何检查记录是INSERT还是UPDATE。下面的代码(没有正常工作):

@receiver(pre_save, sender=Person)
def pre_save_person(sender, instance, **kwargs): 

    if not instance.pk:
        print 'INSERT !!!!!!'
    else:
        print 'UPDATE !!!!!!'
你能帮帮我吗?该项目使用django 1.8.7。

感谢您的帮助

2 个答案:

答案 0 :(得分:3)

关注@ knbk注释后,instance.pk将始终存在。您必须检查数据库中是否存在此instance.pk:

@receiver(pre_save, sender=Person)
def pre_save_person(sender, instance, **kwargs):

    num = Person.objects.filter(pk=instance.pk).count()
    if num == 0 :
        print 'INSERT !!'
    else:
        print 'UPDATE !!'

答案 1 :(得分:0)

尝试

if instance.pk is None: print "inserting" else: print "updating"

这在所有情况下都不起作用,我建议您使用post_save创建标记,除非您特别需要pre_save