首页 > 解决方案 > 如何从 Django 中的查询集中删除前 N 个项目

问题描述

我希望只删除从 django 中的查询返回的前 N ​​个结果。按照我在阅读此 SO 答案时发现的 django 示例here ,我能够使用以下代码限制结果集

m = Model.objects.all()[:N]

但尝试删除它会产生以下错误

m.delete()
AssertionError: Cannot use 'limit' or 'offset' with delete.

有没有办法在 django 中实现这一点?

标签: pythondjangodjango-rest-framework

解决方案


您不能通过限制删除。大多数数据库不支持这一点。

但是,您可以通过两个步骤完成此操作,例如:

Model.objects.filter(id__in=list(Models.objects.values_list('pk', flat=True)[:N])).delete()

因此,我们首先检索第一个N元素的主键,然后在.filter(..)部分中使用它来批量删除这些项目。


推荐阅读