Django既可以过滤也可以过滤某个字段的总数

时间:2011-07-09 11:31:52

标签: django django-models

我有这样的模型和查询

class Employer(Models.model)
    name = ...

class JobTitle(Models.model)
    name = ...
    employer = models.ForeignKey(Employer)

和查询

Employer.objects.select_related('jobtitle')
                      .filter(jtt__activatedate__range=[startdate,enddate])
                      .annotate(jtt_count=Count('jobtitle'))
                      .order_by('-jtt_count')[:5]

如您所见,它会返回5个雇主名单,其中包含与该雇主相关的最大招聘人数,且其激活日期在某个范围内。

但是,我还希望获得该查询中每个雇主的职位总数。 当然,我可以遍历每个雇主并进行这样的查询JobTitle.objects.filter(employer = emp)并查询该查询的长度,但这是不好的解决方案。

我如何在该查询中实现此目的? 虽然可能无法获得职位总数和过滤数量的职位,但我可能会得到每个职位的职业,len(emp.jobtitle)但是它也不起作用。

由于

1 个答案:

答案 0 :(得分:1)

尝试extra查找。所以,在你的情况下,它可能是这样的:

.extra(
    select={
        'jobtitle_count': 'SELECT COUNT(*) FROM YOURAPP_jobtitle WHERE YOURAPP_jobtitle.employer_id = YOURAPP_employer.id'
    },
)