我有一個Address
模型,其中包含兩個浮動字段,lat
和lng
。我已經使用nearby(lat, lng, distance)
方法編寫了一個自定義模型管理器,該方法使用原始SQL僅返回位於特定半徑範圍內的Address
es。 (GeoDjango似乎是矯枉過正)。Django管理過濾器列表與自定義模型管理器額外的方法
調用示例: Address.objects.nearby(53.3, 13.4, 10)
(返回查詢集)
現在我想用這個方法(理想情況下讓用戶選擇一個谷歌地圖上的位置,並使用一個最大距離動態篩選在Django管理Address
對象滑塊)。我不知道如何實現這一點。任何人都可以將我指向正確的方向嗎?
澄清 你不需要寫任何JavaScript對我來說,我只是想知道如何讓Django管理的URL評估額外的查詢參數,這樣我可以做的查詢,如/admin/appname/address/?lat=53&long=13&dist=10
。那麼我可能會弄清楚如何將Google地圖和所需的JavaScript魔法填充到模板中。
UPDATE 我試圖覆蓋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
喜歡它,並返回,沒有過濾的結果。
據我所知,這隻允許你對現有的「查找字段」進行過濾。在這個例子中,他們使用'fieldname_gte'和'fieldname_lte'。 db manager extra方法不會爲latlong + distance提供新的查找字段。 – nisc 2012-02-03 10:35:16