【发布时间】:2010-10-15 10:54:03
【问题描述】:
我有一个 ForeignKey 在我的模型中可以为空,以模拟模型之间的松散耦合。看起来有点像:
class Message(models.Model):
sender = models.ForeignKey(User, null=True, blank=True)
sender_name = models.CharField(max_length=255)
保存时,发件人姓名被写入 sender_name 属性。现在,我希望能够删除发件人引用的 User 实例并将消息留在原处。
开箱即用,一旦我删除 User 实例,此代码总是会导致消息被删除。所以我认为信号处理程序是个好主意。
def my_signal_handler(sender, instance, **kwargs):
instance.message_set.clear()
pre_delete.connect(my_signal_handler, sender=User)
遗憾的是,这绝不是一个解决方案。不知何故,Django 首先收集它想要删除的内容,然后触发 pre_delete 处理程序。
有什么想法吗?我脑子里的结在哪里?
【问题讨论】:
标签: python django django-models