django - Django 删除主对象删除上的所有 M2M 相关对象
问题描述
class Project(models.Model):
name = models.CharField(max_length=100)
project_results_m2m = models.ManyToManyField(Project_Results,blank=True)
def delete_all(self):
pass ### TO BE ADDED FROM ANSWERS
- 信号
@receiver(post_delete,sender=Project)
def delete_project_signal(sender,instance,created=False,**kwargs):
if created is False:
instance.delete_all()
p = Project.objects.get(id=1)
p.delete()
- 一旦以上
delete()
在 Project 对象上触发,1
则信号将执行delete_all
功能。
现在我想删除与Project objectProject_Results
相关的所有对象。project_results_m2m
1
如何在删除时以安全的方式实现它,无论是有信号还是没有信号?
解决方案
可能您需要使用pre_delete
信号:
from django.db.models.signals import pre_delete
@receiver(pre_delete, sender=Project, dispatch_uid='project_delete_all')
def delete_all_instances(sender, instance, using, **kwargs):
instance.project_results_m2m.all().delete()
推荐阅读
- c++ - 使用 gcc-8.2 构建 cpprestsdk 时出错
- firebase-mlkit - FirebaseVisionImage / ML 工具包cropRect() 支持
- php - 如何在mysql中随机获取列值
- css - 如何将css应用于标签的属性?
- ms-access - Microsoft Access DDL 用于新的 bigint 字段
- html - 在内容左侧和右侧的空白空间(包装器的边距)被隐藏之前阻止包装器中的内容收缩
- django - 在 django-tables2 中显示误解
- linux - 如何在 Bash 中将字符串格式日期 yyyymmddThhmmss.sss 转换为日期?
- python - 使用 python 验证自定义邮件 ID
- mongodb - 使用对字段值的引用进行聚合中的 Mongodb 正则表达式