【问题标题】:how to use filter in django如何在 django 中使用过滤器
【发布时间】:2010-10-26 23:03:00
【问题描述】:

类状态(models.Model): someid = models.IntegerField() 值 = 模型.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'

所以我必须在某些值之间获取包含给定 someid 的值。 所以说

  val1 = '1234567890'
    val2  = '4414544544'

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

我尝试使用

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

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

谢谢。

【问题讨论】:

  • 很抱歉发布此信息。我已经解决了这个问题。 list = Status.objects.filter(someid=20, value__lt=val2).filter(value__gt=val1)

标签: django django-models django-queryset django-orm


【解决方案1】:

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

您的查询将是:

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

请参阅Making Queries 上的 Django 文档

【讨论】:

    【解决方案2】:

    你也可以使用the *__range lookup:

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

    请注意,范围查找具有“包容性”,因此您必须调整范围边界。如果像上面一样适用,这应该会产生与 Imran 发布的完全相同的列表。范围查找也适用于日期。

    【讨论】:

      猜你喜欢
      • 2010-10-20
      • 2019-07-23
      • 1970-01-01
      • 1970-01-01
      • 2012-09-18
      • 2016-03-03
      • 1970-01-01
      • 2020-12-11
      • 2014-09-30
      相关资源
      最近更新 更多