2012-07-20 24 views
2

我希望編寫一個通用函數,給定一個查詢集返回模型中每列的不同字段的數量。有沒有更清晰/更好的方法來計算字段中不同項目的數量?

我迄今爲止的功能是:

[queryset.aggregate(Count(x, distinct=True)) for x in [x.get_attname() for x in queryset.model._meta._fields()]]

然而,這是相當哈克/難看/不清楚。我想知道是否有一個更簡單/更清晰的方法來做到這一點?

謝謝。

+3

沒有進一步的什麼使用的方法做分析:'[queryset.aggregate(計數(x.get_attname(),不同= TRUE))對於x在queryset.model._meta._fields()]' – eumiro 2012-07-20 11:02:38

+0

儘管我不確定更清楚,但它更短(更高效)。我有點希望有一個'queryset.variance()'函數。 – jhoyla 2012-07-20 11:06:20

+1

這是可能的。我不知道'queryset',我只是做了一個簡單的Python優化。 – eumiro 2012-07-20 11:11:46

回答

0

您可以將more than one集合傳遞給.aggregate,這樣可以減少對數據庫的調用。 下面的代碼沒有經過測試,只能說明我的意思。

args = [Count(x.get_attname(), distinct=True)) for x in queryset.model._meta._fields()] 
queryset.aggregate(*args) 
相關問題