Django,post_delete,使用反向关系安全吗?

Django, post_delete, is it safe to use reverse relation?

假设专辑有歌曲。

删除歌曲后,我想更新专辑对象的歌曲数。
(假设我们将歌曲数存储在数据库字段中)

这样做安全吗

@receiver(post_delete, sender=Song)
def set_song_count(sender, song, **kwargs):
  song.album_set.update_song_count()

歌曲有专辑的外键。不涉及 M2M。

不,这不安全。来自 documentation

Note that the object will no longer be in the database, so be very careful what you do with this instance.

此时实例已从数据库中删除。尝试获取 song.album_set 将(除非它已在其他地方预取,您不能依赖)触发数据库查询以获取与此相关的对象。我不认为你会得到一个错误,但是因为数据库中不再存在该对象,你只会得到一个空结果。

您可以考虑将 pre_delete 信号用于 运行 一些减少相关相册计数的代码。您也可以在 delete 方法 on the model itself.

中执行此操作