У меня есть модель Address
, которая содержит два поля с плавающей запятой, lat
и lng
.Я написал собственный менеджер моделей с методом nearby(lat, lng, distance)
, который использует сырой SQL для возврата только Address
, которые находятся в пределах определенного радиуса.(GeoDjango оказался излишним).
Пример вызова: Address.objects.nearby(53.3, 13.4, 10)
(возвращает QuerySet)
Теперь я хочу динамически фильтровать Address
объекты в администраторе Django, используя этот метод (в идеале позволяяпользователь выбирает местоположение на карте Google и максимальное расстояние с помощью ползунка).Я понятия не имею, как этого достичь.Кто-нибудь может указать мне правильное направление?
УТОЧНЕНИЕ Вам не нужно писать какой-либо JavaScript для меня, я просто хочу знать, как заставить администратора Django оценивать дополнительные параметры запроса вURL, так что я могу делать запросы, такие как /admin/appname/address/?lat=53&long=13&dist=10
.Затем я, вероятно, смогу выяснить, как вставить карту Google и требуемую магию JavaScript в шаблон самостоятельно.
ОБНОВЛЕНИЕ Я пытался перезаписать queryset
в ModelAdmin следующим образом:
def queryset(self, request):
try:
lat = float(request.REQUEST['lat'])
lng = float(request.REQUEST['lng'])
dist = int(request.REQUEST['dist'])
matches = Address.objects.nearby(lat=lat, lng=lng, dist=dist)
return matches
except:
return super(ReportAdmin, self).queryset(request)
Однако администратору это не нравится и возвращается с ?e=1
, без фильтрации результатов.