Django удалить все связанные с M2M объекты на главном объекте delete - PullRequest
0 голосов
/ 17 января 2020
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() сработало на объекте проекта 1, то сигнал выполнит функцию delete_all.

Теперь я хотел бы удалить все объекты Project_Results, связанные с project_results_m2m для объекта проекта 1.

Как мне этого добиться безопасным образом при удалении, с сигналами или без сигналов?

1 Ответ

1 голос
/ 17 января 2020

Возможно, вам нужно использовать 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()
...