Django queryset过滤GT、LT、GTE、LTE返回完整对象列表

18 投票
2 回答
66488 浏览
提问于 2025-04-18 09:43

我正在尝试使用 .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)

撰写回答