Django:在Django模型查询期间访问和更新要过滤的变量?

时间:2012-12-13 11:41:33

标签: sql django django-models

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

1 个答案:

答案 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

当然,这是每个拉链一个查询,但我认为这是你最好的。