如何删除未被其他对象引用的对象

1 投票
1 回答
660 浏览
提问于 2025-04-18 12:28

我有两个模型,差不多是这样的:

class ContactDetails(Model):
  name = models.CharField()
  dept = models.CharField()

class Server(Model):
  ip = models.GenericIPAddressField()                           
  hostname = models.CharField()
  contact = models.ForeignKey(ContactDetails)

一个 ContactDetails 对象可以被很多 Server 对象引用。

当我删除一个 Server 记录的时候,我也想把相关的 ContactDetails 记录删除掉。

但是,前提是没有其他的 Server 记录在引用这个 ContactDetails 记录。请问在 Django 中,最好的做法是什么呢?

1 个回答

3

可能需要使用 pre_delete 或 post_delete 这两种信号

from django.db import models
from django.dispatch import receiver

@receiver(models.signals.post_delete, sender=Server)
def delete_contact(sender, instance, **kwargs):
    if not Server.objects.filter(contact=instance.contact):
        instance.contact.delete()

这个实例是指已经从数据库中删除的服务器实例。

撰写回答