Как я могу использовать 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)
)