我希望只删除django中查询返回的前N个结果。遵循我在阅读this SO answer时发现的django示例,我能够使用以下代码限制结果集
m = Model.objects.all()[:N]
但尝试删除它会产生以下错误
m.delete()
AssertionError: Cannot use 'limit' or 'offset' with delete.
在django中有没有办法做到这一点?
我希望只删除django中查询返回的前N个结果。遵循我在阅读this SO answer时发现的django示例,我能够使用以下代码限制结果集
m = Model.objects.all()[:N]
但尝试删除它会产生以下错误
m.delete()
AssertionError: Cannot use 'limit' or 'offset' with delete.
在django中有没有办法做到这一点?
4条答案
按热度按时间kupeojn61#
您不能删除超过限制。大多数数据库不支持此功能。
你可以通过两个步骤来完成,比如:
因此,我们首先检索第一个
N
元素的主键,然后在.filter(..)
部分中使用它来批量删除这些项。bz4sfanl2#
你没有直接的选择权。所以你应该用一些先进的方法来删除它。举例来说:
使用这种方式,你可以找到你不理想的对象,并删除除了它们的一切。你可以使用
id
以外的任何东西。但是id是唯一的,可以帮助你优化。请注意,在第一行中,我获取的是从
N
到last
的项。(而不是从first
到N
)xmq68pz93#
试试这个。遍历所有过滤过的对象
jk9hmnmh4#
您可以循环查询集并对对象应用delete方法。