2011-07-09 61 views
0

我有這樣的模型和查詢Django的某一領域的兩個過濾總數

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] 

正如你看到它返回一個具有jobtitles的最大數量5僱主名單這與僱主有關,其激活日期在一定範圍內。

但是,我也想獲得每個僱主在該查詢中的總職位數。 當然,我可以遍歷每個僱主,並作出這樣的查詢JobTitle.objects.filter(employer = emp)並考慮到查詢的長度,但它是不好的解決方案。

如何在該查詢中完成此操作? 儘管可能無法獲得總數和職位名稱的篩選數量,但我可能會得到每個emplyoer的工作項目,例如len(emp.jobtitle),但它也不起作用。

感謝

回答

1

嘗試extra查找。所以,在你的情況下,它可能是這樣的:

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

+0

謝謝,這將確定工作,但它有效地工作? – brsbilgic

+0

我認爲是的,它的確如此,因爲django只會執行1個查詢,唯一的區別是它不僅僅是'select field1,field2 ...',而且是內聯查詢:'select field1,field2,(select count (*)...),...' – sigurd