Django:在queryset.update上发出信号

时间:2009-11-07 14:12:47

标签: django django-signals

如果您使用的是queryset.delete()方法,Django会发送pre / post_delete信号,但不应该在queryset.update()上发送pre / post_save吗?

1 个答案:

答案 0 :(得分:7)

也许应该,但事实并非如此。 .update()不会对QuerySet中的各个对象调用.save()方法,而是在单个SQL调用中更新all(UPDATE,因为它发生)。由于它不使用.save(),因此调用保存前和保存后信号会不一致。我当然可以设想一个人们可能希望它这样做的用例,但我也可以设想一个人不会这样做的情况。在我看来,没有调用保存前和保存后信号是正确的行为,因为它为程序员留下了更多的灵活性。手动触发这些信号并不困难,我认为要求程序员记住触发信号以获得所需行为绝对是一个更好的设计决策,而不是让他们记住断开信号以避免不良行为。