我试图使用一个整型变量查找所有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
有没有一种更简单的方法可以在不循环遍历对象的情况下完成此操作?
如果我正确理解你,你想过滤所有 Location 对象与 obj.location_start < location_query < obj.location_end . 其筛选语句如下所示:
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 .
<=
location_start__lte
location_end__gt=location_query
这个怎么样(用 gte 和 lte ):
loc_obj = Location.objects.filter( sample_id=sample_obj, location_start__gte=location_start, location_end__lte=location_end )