如何在django中使用过滤器

时间:2022-10-16 19:38:39

class Status(models.Model): someid = models.IntegerField() value = models.IntegerField() status_msg = models.CharField(max_length = 2000)

class Status(models.Model):someid = models.IntegerField()value = models.IntegerField()status_msg = models.CharField(max_length = 2000)

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

so I have to fetch values contain a giving someid between some values. so let say

所以我必须获取包含某些值之间的值的值。所以说吧

  val1 = '1234567890'
    val2  = '4414544544'

so my final result should be list containing of 2 entry for id = 20 how to implement this.

所以我的最终结果应该是包含id = 20的2个条目的列表如何实现它。

i tried using

我试过用

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

which is wrong? how to fix this.

哪个错了?如何解决这个问题。

thanks.

2 个解决方案

#1


Django Query API doesn't use traditional comparison operators. It uses (field)__(operatorname)=(value) style syntax.

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

Your query would be:

您的查询将是:

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

See Django Docs on Making Queries

请参阅Django Docs on Making Queries

#2


You can also use the *__range lookup:

您还可以使用* __范围查找:

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

Be aware, range lookups are 'inclusive', so you have to adapt the range boundaries. If applicable like above, this should result in the very same list as posted by Imran. Range lookups also work with dates.

请注意,范围查找是“包容性的”,因此您必须调整范围边界。如果适用,如上所述,这将产生与Imran发布的完全相同的列表。范围查找也适用于日期。

#1


Django Query API doesn't use traditional comparison operators. It uses (field)__(operatorname)=(value) style syntax.

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

Your query would be:

您的查询将是:

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

See Django Docs on Making Queries

请参阅Django Docs on Making Queries

#2


You can also use the *__range lookup:

您还可以使用* __范围查找:

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

Be aware, range lookups are 'inclusive', so you have to adapt the range boundaries. If applicable like above, this should result in the very same list as posted by Imran. Range lookups also work with dates.

请注意,范围查找是“包容性的”,因此您必须调整范围边界。如果适用,如上所述,这将产生与Imran发布的完全相同的列表。范围查找也适用于日期。