如何在預儲存訊號中查詢是否插入或更新

通過利用 pre_save,我們可以確定我們資料庫上的 save 操作是關於更新現有物件還是建立新物件。

為了實現這一點,你可以檢查模型物件的狀態:

    @receiver(pre_save, sender=User)
    def pre_save_user(sender, instance, **kwargs): 
        if not instance._state.adding:
            print ('this is an update')
        else:
            print ('this is an insert')

現在每次發生 save 動作時,pre_save 訊號都會執行並列印出來:

  • this is an update 如果動作來自更新動作。
  • this is an insert 如果動作來自插入動作。

請注意,此方法不需要任何其他資料庫查詢。