我有以下数据模型:
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。
P.S。这个问题与How do I remove multiple objects in a ManyToMany relationship based on a filter?有关,但在那个问题中,在删除关系之前没有模型遍历。
答案 0 :(得分:2)
您可以使用ManyToMany
属性访问through
表。通过删除该表中的项目,您将删除该关系。所以试试:
m2m_model = Article.attachments.through
m2m_model.objects.filter(article__article_set=article_set).delete()
这将在一个查询中运行。