Django queryset过滤GT、LT、GTE、LTE返回完整对象列表
我正在尝试使用 .filter(field__lte = parameter)
来过滤我数据库中的对象,但它却返回了所有对象,没有过滤掉任何东西。我甚至把参数设置得比数据库中存储的任何值都高,但所有对象仍然被返回。
>> all_objects = Ranked.objects.all()
>> filtered = all_objects.filter(score__lte = 100) #The max possible score is 100
>> len(filtered)
87 #Every object in the db
我查询的数据库字段是一个 IntegerField
(整数字段)。
我是不是做错了什么?谢谢你的帮助。
2 个回答
10
你说的意思是 最大可能得分是100
。通过使用 score__lte=100
,你是在筛选所有得分 小于或等于 100 的对象——根据你自己的定义,这样筛选出来的就是表格里的每一个对象。
18
正如你所说,最高分是 100
,所以它总是会返回所有的对象,因为 lte
的意思是返回所有分数小于或等于 100
的对象。你可能需要使用 lt
,它的意思是只返回那些分数小于 100
的对象:
filtered = all_objects.filter(score__lt=100)