python - 如果一个对象未​​被另一个对象引用,如何删除该对象

标签 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)

ContactDetails 对象可以被许多服务器对象引用。

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

但前提是没有其他服务器记录引用该 ContactDetails 记录。在 Django 中执行此操作的最佳实践方法是什么?

最佳答案

可能使用 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()

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

关于python - 如果一个对象未​​被另一个对象引用,如何删除该对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24627841/

相关文章:

python - 如何在其他设备/磁盘上安装和运行 rodeo-python?

python - 如何最有效地使用 collections.deque(popleft 与 appendleft)

sql - 如何在 SQL Server 查询中同时使用 LIKE 和 NOT LIKE

Django 和 xlrd,从内存中读取

python - 如何在不覆盖旧值的情况下更新字典中的键

python - 为什么错误回溯显示已编辑的脚本而不是实际运行的脚本?

MYSQL JOIN 并根据 MA​​X 获取整行

sql - 什么时候应该使用指向候选键而不是主键的外键的例子?

python - Django manage.py 问题

python - Reportlab 不在 Google App Engine 上的 Django 应用程序中生成图表