如何在Django表单的queryset上使用切片?

时间:2019-01-25 01:18:47

标签: python django django-models django-forms

假设我有一个Django模型播放器。播放器模型的文件名“指向”一个整数字段。 我需要显示来自Model.ChoiceField中按得分排序的前10名玩家。

查询集应为

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

但是,如果我对将设置为表单字段的queryset进行切片,则单击提交按钮时会引发错误。

Cannot filter a query once a slice has been taken.

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

1 个答案:

答案 0 :(得分:0)

这似乎是this

的副本

但是那里的答案应该为您清除东西

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

  

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

     

还要注意,即使切片未评估的QuerySet也会返回   另一个未评估的QuerySet,对其进行进一步修改(例如,添加更多   过滤器或修改顺序)是不允许的,因为那是不允许的   可以很好地翻译成SQL,也没有明确的含义。