2009-11-07 27 views

回答

6

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

+1

虽然提到的原因我认为这是某种不一致的行为,因为queryset.delete()方法也不会调用单个实例上的delete(),但它会发送与model.delete()一样的信号! – 2009-11-07 17:37:14

+1

此外,为了能够在查询集上发送保存相关信号,除了更新之外,他们基本上还需要为元素进行选择,从而消除了批量更新方法的优势。 – 2012-11-21 16:10:33