首页 > 解决方案 > 如何在 django 表单的查询集上使用切片?

问题描述

假设我有一个 django 模型播放器。播放器模型有一个文件名“点”一个整数字段。我需要在 from.ModelChoiceField 中显示按点数排序的前 10 名玩家。

查询集将是

Player.objects.all().order_by('-points')[:10]

但是,如果我在将设置为表单字段的查询集上使用切片,则单击提交按钮时会引发错误。

Cannot filter a query once a slice has been taken.

有什么办法可以解决这个问题?

标签: pythondjangodjango-modelsdjango-forms

解决方案


这似乎与此重复

但是那里的答案应该为您解决问题

取自:https ://docs.djangoproject.com/en/2.2/ref/models/querysets/

切片。如限制查询集中所述,可以使用 Python 的数组切片语法对查询集进行切片。对未计算的 QuerySet 进行切片通常会返回另一个未计算的 QuerySet,但如果您使用切片语法的“step”参数,Django 将执行数据库查询,并返回一个列表。对已评估的 QuerySet 进行切片也会返回一个列表。

另请注意,即使对未评估的 QuerySet 进行切片返回另一个未评估的 QuerySet,也不允许对其进行进一步修改(例如,添加更多过滤器或修改排序),因为这不能很好地转化为 SQL,而且它也没有明确的含义。


推荐阅读