2009-05-18 53 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發佈的完全相同的列表。範圍查找也適用於日期。