0

我有以下数据模型:

class ArticleSet(Model):
    pass

class Article(Model):
    article_set = ForeignKey(ArticleSet, related_name = 'articles')
    attachments = ManyToManyField(Attachment, related_name='articles')

现在我有一个 ArticleSet 并想清除(而不是删除!)其中的所有附件。以下将起作用:

for article in article_set.articles.all():
    article.attachments.clear()

但是,这将导致 article_set 中每篇文章的数据库查询。有没有办法在一次调用数据库中做同样的事情?我正在使用 Django 1.11。

ps 这个问题与如何根据过滤器删除多对多关系中的多个对象有关?,但在那个问题中,在删除关系之前没有模型遍历。

4

1 回答 1

2

您可以ManyToMany使用该through属性访问该表。通过从该表中删除项目,您将删除关系。所以试试:

m2m_model = Article.attachments.through
m2m_model.objects.filter(article__article_set=article_set).delete()

这将在一个查询中运行。

于 2017-07-23T16:21:44.470 回答