我正在其中一个模型上运行大量过滤器。具体来说,我在其中一种观点中正在做这样的事情:
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的queryset过滤与此我要添加的其他过滤器结合在一起?我知道如果城市只是一个列表,我可以只使用.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)
会给你你想要的
关于python - 根据计算值过滤Django查询集,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17118939/