python - 如何从 Django 中的查询集中删除前 N 个项目
问题描述
我希望只删除从 django 中的查询返回的前 N 个结果。按照我在阅读此 SO 答案时发现的 django 示例here ,我能够使用以下代码限制结果集
m = Model.objects.all()[:N]
但尝试删除它会产生以下错误
m.delete()
AssertionError: Cannot use 'limit' or 'offset' with delete.
有没有办法在 django 中实现这一点?
解决方案
您不能通过限制删除。大多数数据库不支持这一点。
但是,您可以通过两个步骤完成此操作,例如:
Model.objects.filter(id__in=list(Models.objects.values_list('pk', flat=True)[:N])).delete()
因此,我们首先检索第一个N
元素的主键,然后在.filter(..)
部分中使用它来批量删除这些项目。
推荐阅读
- c# - WinForms 动态矩阵新表单带按钮
- javascript - 如何在浏览器(节点)中获取其他域主体
- themes - 修改 DNN 中的个人资料头像 url
- arrays - python多索引数组日期时间格式(作为两个不同的日期时间)
- javascript - 切换菜单自动关闭ul
- jpa - 具有复合主的 JPA 实体也是同一个表的外键
- docker - 提供有关 API 使用情况的服务器端指标
- android - 如何从 FileProvider URI 获取文件?
- rabbitmq - STOMP 标头中暴露的 RabbitMQ 版本
- javascript - Safari iOS 自动填充“国家”不起作用