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.
中执行此操作
假设专辑有歌曲。
删除歌曲后,我想更新专辑对象的歌曲数。
(假设我们将歌曲数存储在数据库字段中)
这样做安全吗
@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.