Django根据具有ManyToMany关系的查询删除对象

时间:2019-05-08 14:40:54

标签: python django

我有3个模型FilesetFileContentBuild

  • FileFileset有多对多的关系
  • ContentbuildFileset有一对多的关系

模型

# models.py

class File(models.Model):
    file_uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False, db_index=True)


class ContentBuild(models.Model):
    content_build_uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False, db_index=True)
    content_build_name = models.CharField(max_length=50)
    rolled_out = models.BooleanField(default=False, editable=False)


class Fileset(models.Model):
    fileset_uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False, db_index=True)
    files = models.ManyToManyField(File, related_name='fileset_files'
    content_build = models.ForeignKey(ContentBuild, on_delete=models.CASCADE, related_name='content_filesets')

目标

删除Fileset时,我只想删除在推出的Files中未使用的相关ContentBuild。我可以过滤有资格被删除的Files,如下所示:

File.objects.filter(
    fileset_files__isnull=False,
    fileset_files__content_build__rolled_out=False
)

问题

我不知道如何以及在何处实现删除由上面的过滤器返回的Files的函数。

我的想法是创建一个函数并将其传递给on_delete,但是ManyToManyField没有on_delete

我在哪里实现删除功能以删除与要删除的Files相关的某些Fileset

0 个答案:

没有答案