我試圖使用Django(1.5.1)和草堆(2.0.1)用於搜索的對象,其中包括地理位置信息:如何將GeoDjango與Haystack一起使用?
from django.contrib.gis.db import models as geomodels
class GeoModel(geomodels.Model):
geo_point = geomodels.PointField()
# Geographic Locator manager
objects = geomodels.GeoManager()
...
我需要根據地理位置進行過濾。下面的查詢工作,主要是因爲GeoModel
使用geomodels.GeoManager
:
from django.contrib.gis.measure import D
from django.contrib.gis.geos import Point
...
center = Point(lat, lng)
radius = D(km=100)
GeoModel.objects.all().filter(geo_point__distance_lte=(center, radius))
問題是,當我嘗試使用草堆過濾基於其地理位置的結果。我做了一個SearchView的子類:
from haystack.views import SearchView
...
class MySearchView(SearchView):
def get_results(self):
center = Point(lat, lng)
radius = D(km=100)
results = super(MySearchView, self).get_results() # << OK, get all results
return results.filter(geo_point__distance_lte=(center, radius)) # << WRONG, no results
那麼,我該如何定製Haystack views/form來過濾基於特定位置的結果呢? 在此先感謝。
從定義點開始,你從哪裏獲得緯度/經度?另一件事是Point首先用lng定義,所以它應該是center = Point(lng,lat)。我也受騙了,但在閱讀文檔時發現它 - https://django-haystack.readthedocs.org/en/latest/spatial.html#points –
嗨Dan,感謝您的澄清。我從Google Geolocation API獲取經度和緯度,並將這些值存儲在Django會話中。然後我按照這個順序建立'Point(lat,lng)'參數,但是我會檢查你發佈的參考,謝謝。 – Cartucho