0

我希望为我的模型构建一个 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 数据库以防万一。

4

1 回答 1

0

您不能在单个查询中执行此操作,无论是在 Django 中,还是在 SQL 中(据我所知)。

最好的办法是简单地遍历 zip 列表,在每个 zip 中查询最多 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

当然,这是每个 zip 的一个查询,但我认为这是你要做的最好的事情。

于 2012-12-13T11:59:03.583 回答