2009-05-18 20 views
1

Klasse-Status (models.Model): someid = models.IntegerField() value = models.IntegerField() STATUS_MSG = models.CharField (max_length = 2000)wie Filter in django verwenden

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

also muss ich Werte holen, die zwischen einigen Werten ein paar geben. so sagen wir mal

val1 = '1234567890' 
    val2 = '4414544544' 

so meine letzte Ergebnisliste sollte für ID von 2 Eintrag enthält = 20 , wie diese umzusetzen.

ich versuchte

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

mit was falsch ist? wie Sie das beheben können.

danke.

+0

Entschuldigung für das Posten dieses. Ich habe das Problem behoben. list = Status.objects.filter (someid = 20, value__lt = val2) .filter (value__gt = val1) – user102724

Antwort

10

Django Query API verwendet keine traditionellen Vergleichsoperatoren. Es verwendet (Feld) __ (operatorname) = (Wert) Stilsyntax.

Ihre Abfrage wäre:

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

Siehe Django Docs auf Making Queries

3

Sie auch the *__range lookup verwenden können:

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

bewusst sein, Bereich Lookups sind 'inklusive', so dass Sie müssen die Bereichsgrenzen anpassen. Falls wie oben beschrieben, sollte dies zu der gleichen Liste führen, die von Imran gepostet wurde. Bereichsnachfragen funktionieren auch mit Datumsangaben.