Django ORM - найти объекты, которые подпадают под переменную в диапазоне полей модели? - PullRequest
0 голосов
/ 21 января 2019

Я пытаюсь найти все объекты django, используя целочисленную переменную, где эта переменная находится между двумя полями модели django.Я понимаю, что использование __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 ]

0 голосов
/ 21 января 2019

Если я вас правильно понимаю, вы хотите отфильтровать все 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.

0 голосов
/ 21 января 2019

Как насчет этого (используя gte и lte ):

loc_obj = Location.objects.filter(
          sample_id=sample_obj,
          location_start__gte=location_start,
          location_end__lte=location_end
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...