如果没有其他对象引用,如何删除对象

时间:2014-07-08 09:07:11

标签: python sql django

我有两个类似的模型:

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

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

许多Server对象可能会引用ContactDetails对象。

当我删除服务器记录时,我还想删除相关的ContactDetails记录。

但仅当没有其他服务器记录引用该ContactDetails记录时。在Django中这样做的最佳实践方法是什么?

1 个答案:

答案 0 :(得分:3)

可能使用pre_delete或post_delete signals

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()

该实例是已从数据库中删除的服务器实例。