Одним из способов может быть использование модуля наборов python и просто пересечение:
создать пару наборов запросов, которые перекрываются при id = 5:
In [42]: first = Location.objects.filter(id__lt=6)
In [43]: last = Location.objects.filter(id__gt=4)
"импорт наборов"сначала (получает предупреждение об устаревании ... ммм ... о хорошо).Теперь создайте и пересекайте их - мы получаем один элемент в наборе:
In [44]: sets.Set(first).intersection(sets.Set(last))
Out[44]: Set([<Location: Location object>])
Теперь получаем идентификатор элементов пересечения, чтобы проверить, действительно ли он равен 5:
In [48]: [s.id for s in sets.Set(first).intersection(sets.Set(last))]
Out[48]: [5]
Это, очевидно, поражаетбаза данных дважды и возвращает все элементы набора запросов. Лучше было бы объединить фильтры в ваших менеджерах, и это должно быть в состоянии сделать это за одно обращение к БД и на уровне SQL.Я не вижу метод QuerySet.and / или (QuerySet).