2009-05-18 56 views
1

类状态(models.Model): someid = models.IntegerField() 值= models.IntegerField() STATUS_MSG = models.CharField(MAX_LENGTH = 2000)如何使用过滤器在Django

so my database look like: 
20  1234567890 'some mdg' 
20  4597434534 'some msg2' 
20  3453945934 'sdfgsdf' 
10  4503485344 'ddfgg' 

所以我必须提取值包含一些值之间的someid。 所以我们说

val1 = '1234567890' 
    val2 = '4414544544' 

所以我最终的结果应该是包含2项中的id = 20 如何实现此列表。

我尝试使用

list = Status.objects.filter(someid = 20, value < val2, value > val1) 

这是错的? 如何解决这个问题。

谢谢。

+0

对此发表感到抱歉。 我已解决此问题。 list = Status.objects.filter(someid = 20,value__lt = val2).filter(value__gt = val1) – user102724 2009-05-18 06:16:28

回答

10

Django Query API不使用传统的比较运算符。它使用(field)__(operatorname)=(value)风格的语法。

您所查询的是:

list = Status.objects.filter(someid=20, value__lt=val2, value__gt=val1) 

见Django文档上Making Queries

3

您还可以使用the *__range lookup

list = Status.objects.filter(someid=20, value__range=(val1+1, val2-1)) 

注意,范围查找是 '包容性',所以你必须调整范围边界。如果像上面那样适用,这应该产生与Imran发布的完全相同的列表。范围查找也适用于日期。