代码之家  ›  专栏  ›  技术社区  ›  trouselife

Django ORM-查找一系列模型字段之间的变量所适合的对象?

  •  1
  • trouselife  · 技术社区  · 6 年前

    我试图使用一个整型变量查找所有Django对象,其中该变量位于两个Django模型字段之间。我理解使用uu range()通常是为了查找模型字段是否在两个变量之间,但我需要相反的方法。

    模型:

    class Location(models.Model):
    
         location_start = models.IntegerField()
         location_end = models.IntegerField()
         sample_id = models.ForeignKey(Sample,
                on_delete=models.CASCADE, db_column='sample_id')
    

    视图(不起作用):

    location_query = 1276112
    
    loc_obj = Location.objects.filter(
                  sample_id=sample_obj,
                  location_query__range(location_start, location_end)
    
        )
    

    原始SQL:

    SELECT *
     FROM location
     WHERE sample_id=12 
     AND 1276112 BETWEEN location_start AND location_end
    

    有没有一种更简单的方法可以在不循环遍历对象的情况下完成此操作?

    2 回复  |  直到 6 年前
        1
  •  2
  •   Daniel Hepper    6 年前

    如果我正确理解你,你想过滤所有 Location 对象与 obj.location_start < location_query < obj.location_end . 其筛选语句如下所示:

    loc_obj = Location.objects.filter(
                  sample_id=sample_obj,
                  location_start__lt=location_query,
                  location_end__gt=location_query)
    
              )
    

    如果要包含范围( <= )、使用 location_start__lte location_end__gt=location_query .

        2
  •  2
  •   ruddra    6 年前

    这个怎么样(用 gte lte ):

    loc_obj = Location.objects.filter(
              sample_id=sample_obj,
              location_start__gte=location_start,
              location_end__lte=location_end
    )