Как я могу использовать OR-клаузу с haystack вместе с фильтром расстояний?

Я использовал фильтр расстояний, используя обычные фильтры запросов django в OR-клаузе:

# either it's within the preset distance of the location
# OR it's not an in-person event
self.filter(Q(location__distance_lt=(geometry, LOCATION_WITHIN_D)) | ~Q(type=Event.IN_PERSON))

Я хочу сделать подобную фильтрацию как часть запроса haystack, используя SQ:

queryset = queryset.filter(SQ(location__distance_lt=(geometry, LOCATION_WITHIN_D)) | ~SQ(type=Event.IN_PERSON))

но вместо этого я получаю ошибку: not all arguments converted during string formatting - и это происходит только с частью запроса distance_lt, а не ~SQ(type..)

Я могу применить фильтрацию расстояний к моему поисковому запросу "стог сена", используя

queryset = queryset.dwithin('location', geometry, LOCATION_WITHIN_D)`

но я хочу иметь возможность иметь условие "или" в этом подпункте.

Возможно ли это вообще, не прибегая к сырым запросам?

фильтр георасстояния и фильтр соответствия могут быть объединены следующим образом:

from django.contrib.gis.measure import D

LOCATION_WITHIN_D = D(km=0.1)
geometry = {
  "lat": 28.626, 
  "lon": -18.882
}

queryset = (
    queryset.dwithin('location', geometry, LOCATION_WITHIN_D) |
    queryset.filter(type=Event.IN_PERSON)
)
Вернуться на верх