2014-06-13 472 views
5

我试图使用.filter(field__lte = parameter)过滤我的数据库中的对象,但它只是返回所有对象并且不会过滤掉任何对象。我甚至将参数设置为远高于存储在数据库中的任何值,并且仍然返回所有对象。Django queryset filter GT,LT,GTE,LTE返回完整的对象列表

>> 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

我在这里做错了什么?谢谢你的帮助。

+0

也许所有对象得分为<= 100确实有物体,其得分为> 100? –

+0

尝试做'score__lte = 10'并看看你是否得到相同的结果。它对我来说看起来很好 - 最大值为100,并且让我获得小于或等于100的所有值 – karthikr

+2

Django ORM将你提供给“过滤器”的条件解释为不是“将这些过滤掉”_,而是作为_“let这些通过“_”。 –

回答

6

您的意思是The max possible score is 100。通过使用score__lte=100,您正在筛选所有对象,其中score小于或等于 100 - 这是您自己定义的表中的每个对象。

6

正如你所说的最大可能分数是100所以它总是会返回所有对象,因为lte意味着返回所有分数小于或等于100的对象。您可能需要lt查找这意味着只返回其分值低于100这些对象:

filtered = all_objects.filter(score__lt=100) 
相关问题