gpt4 book ai didi

python - 具有自定义模型管理器额外方法的 Django 管理过滤器列表

转载 作者:太空宇宙 更新时间:2023-11-04 06:43:16 26 4
gpt4 key购买 nike

我有一个 Address 模型,它包含两个浮点字段,latlng。我编写了一个带有 nearby(lat, lng, distance) 方法的自定义模型管理器,该方法使用原始 SQL 仅返回位于特定半径内的 Addresses。 (GeoDjango 似乎矫枉过正)。

调用示例:Address.objects.nearby(53.3, 13.4, 10)(返回 QuerySet)

现在我想使用此方法动态过滤 Django 管理中的 Address 对象(理想情况下让用户在 Google map 上选择一个位置并使用 slider 选择最大距离)。我不知道如何实现。谁能指出我正确的方向?

澄清您不需要为我编写任何 JavaScript,我只是想知道如何让 Django 管理员评估 URL 中的额外查询参数,这样我就可以执行类似 /admin/appname/address/?lat= 的查询53&long=13&dist=10。然后我可能会弄清楚如何自己将 Google map 和所需的 JavaScript 魔术填充到模板中。

更新我试过像这样在 ModelAdmin 中覆盖 queryset:

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,没有过滤结果。

最佳答案

我已经将它添加到具有 address 作为 FK 的对象类的 ModelAdmin 中:

def lookup_allowed(self, lookup, *args, **kwargs):
if lookup == 'address__dst':
return True
return super(ReportAdmin, self).lookup_allowed(lookup, args, **kwargs)

我已将其添加到模型中

def _filter_or_exclude(self, negate, *args, **kwargs):
try:
value = kwargs.pop('address__dst')
matches = self.nearby(*map(float, value.split(',')))
pks = [m.pk for m in matches]
kwargs.update({ 'pk__in': pks })
except:
pass
return super(ReportQuerySet, self)._filter_or_exclude(negate, *args, **kwargs)

允许我像 ?address_dst=lat,lng,dst 那样进行过滤。

有更好的解决方案吗?

关于python - 具有自定义模型管理器额外方法的 Django 管理过滤器列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9122106/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com