Address
モデルには、2つのフロートフィールド、lat
とlng
が含まれています。私はnearby(lat, lng, distance)
メソッドを持つカスタムモデルマネージャを作成しました。生のSQLを使用して、特定の半径内にあるAddress
だけを返します。 (GeoDjangoは過度のように見えた)。Django adminフィルタリストとカスタムモデルマネージャの追加メソッド
例コール: Address.objects.nearby(53.3, 13.4, 10)
(クエリセットを返す)
今、私は動的に理想的なユーザーがGoogleマップ上の場所を選択させると最大距離は、使用して(この方法を使ってDjangoのadminにAddress
オブジェクトをフィルタしたいですスライダー)。私はそれをどのように達成するか考えていない。誰かが私を正しい方向に向けることができますか?あなたは私のために任意のJavaScriptを記述する必要はありません
明確化 は、私はDjangoの管理者は、私が/admin/appname/address/?lat=53&long=13&dist=10
ようなクエリを行うことができるように、URLに余分なクエリパラメータを評価するようにする方法を知りたいです。私はおそらく、Googleマップと必要なJavaScriptマジックをテンプレートに埋め込む方法を考え出すことができます。
UPDATE 私はそうのようなModelAdminの中01を上書きしようとしました:
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
で返します。
私の知る限り、これは既存の 'lookup fields'をフィルタリングすることしかできません。この例では、 'fieldname_gte'と' fieldname_lte'を使用しています。 db manager extraメソッドでは、latlong + distanceの新しいルックアップフィールドが得られません。 – nisc