我希望为我的模型构建一个Django查询,让我的过滤器随着查询的进行而改变。
我有一个我正在查询的模型Activity
。每个对象都有一个postal_code
字段,我在查询日期范围内存储在数组postal_codes_to_query
中的多个邮政编码。我想确保在每个邮政编码中获得均匀分布的对象。我的数据库有数百万个活动,所以当我查询限制时,我只会在activities
的早期收到与邮政编码匹配的postal_codes_to_query
。我目前的查询如下:
Activity.objects.filter(postal_code__in=postal_codes_to_query).filter(start_time_local__gte=startTime).filter(start_time_local__lte=endTime).order_by('start_time_local')[:10000]
如果我正在搜索20个邮政编码,理想情况下,我希望收到10000 activities
,每个我查询的邮政编码有500 activities
。
Django有可能吗?如果没有,是否有一些我可以编写的自定义SQL来实现这一目标?我正在使用Heroku Postgres数据库以防万一。
答案 0 :(得分:0)
您无法在单个查询中执行此操作,无论是在Django中还是在SQL中(据我所知)。
最好的办法就是遍历拉链列表,查询每个拉链最多500个:
activities_by_zip = {}
for code in postal_codes_to_query:
activities = Activity.objects.filter(postal_code=code).filter(
start_time_local__gte=startTime).filter(
start_time_local__lte=endTime).order_by('start_time_local')[:500]
activities_by_zip[code] = activities
当然,这是每个拉链一个查询,但我认为这是你最好的。