Skip to main content
 首页 » 编程设计

python之根据计算值过滤 Django 查询集

2024年08月29日28over140

我在我的一个模型上运行了一堆过滤器。具体来说,在我的一个观点中,我正在做这样的事情:

cities = City.objects.filter(name__icontains=request.GET['name'] 
cities = City.objects.filter(population__gte=request.GET['lowest_population'] 
return cities 

现在我想添加另一个不同类型的过滤器。具体来说,我只想包括那些距离特定邮政编码有一定距离的城市。我已经有了相关的功能,比如:

distanceFromZipCode(city, zipCode) 
# This returns 110 miles, for example 

如何将 Django 的查询集过滤与我想添加的这个额外过滤器结合起来?我知道如果城市只是一个列表,我可以只使用 .filter() 并传入适当的 lambda(例如,如果与相关邮政编码的距离为 <100,则返回 true)。

但是我处理的是查询集,而不是简单的列表,那么我该怎么做呢?

请您参考如下方法:

问题的根源在于您试图混合使用在数据库中完成的 sql 过滤器和 python 过滤器,后者在记录从数据库中具体化后完成。如果不从数据库中取出项目然后在其之上进行过滤,就无法做到这一点。

你不能,通过你的 python 函数做到这一点,但你可以通过 geodjango 做到这一点:

https://docs.djangoproject.com/en/dev/ref/contrib/gis/db-api/#distance-queries

cites = cities.filter(distance_lt=101) 

会得到你想要的