我们的网站使用Django3.1。我们有一个模型User
,它与两个网站的两个SiteProfile
模型相关,也与其他模型相关,如Friend
和UserEmailAddress
。所有关系都与on_delete=models.CASCADE
有关。我们还为models.signals.post_delete
等模型提供了Friend
信号,以更新用户拥有的朋友数量,该数量保存在一个SiteProfile
模型中。但是问题是,当删除一个用户时,会调用信号,然后保存SiteProfile
对象,然后我会得到一个违反外键的异常。我们以前在UserEmailAddress
模型(用户的电子邮件地址)上也有同样的问题,我用以下代码修复了这个问题:
def delete(self, *args, **kwargs):
if ((self.is_staff) or (self.is_superuser)):
warnings.warn('Can’t delete staff user.')
return False
else:
with transaction.atomic():
for user_email_address in self.email_addresses.all():
user_email_address.delete()
return_value = super().delete(*args, **kwargs)
return return_value
但是我想知道,有没有更好的方法来删除一个用户及其所有相关对象,这些对象具有on_delete=models.CASCADE
,但不将models.signals.post_delete
中的计数器保存到数据库中?我是否可以在models.signals.post_delete
中检查一些内容,以了解用户是否正在被删除,然后不保存计数器?因为我不想特别删除def delete
方法中的任何相关对象,所以至少有5个这样的模型不包括这两个SiteProfile
模型
目前没有回答
相关问题 更多 >
编程相关推荐