2012-02-04 19 views
0

有一個以id爲主鍵的表datatn_crawlmeta。 我想從表中獲得不同的nm並顯示它。通過Django管理界面上的查詢渲染組。 (字段中的不同值在django中被打破)

mysql> SELECT id, gid_id, nm from datagen_crawlmeta limit 10; 
+----+--------+----------------------------+ 
| id | gid_id | nm       | 
+----+--------+----------------------------+ 
| 1 |  1 | votes      | 
| 2 |  1 | performance_rating   | 
| 3 |  1 | title      | 
| 4 |  1 | specs__Sound__Loudspeaker | 
| 5 |  1 | specs__Sound__3.5mm jack | 
| 6 |  1 | specs__Sound__Alert types | 
| 7 |  1 | specs__Sound__unknown0  | 
| 8 |  1 | specs__Features__Java  | 
| 9 |  1 | specs__Features__Messaging | 
| 10 |  1 | specs__Features__Colors | 
+----+--------+----------------------------+ 
10 rows in set (0.00 sec) 

使用以下代碼將返回所有行。 它是因爲self.model.objects.all().distinct('nm')正在返回CrawlMeta對象而不是nm。

我可以使用self.model.objects.values_list('nm', flat=True).distinct(),但它返回 nm的列表,它與查詢集的返回類型不兼容。

class CrawlMetaAdmin(admin.ModelAdmin): 
    list_display = ['nm'] 

    def queryset(self, request): 
     query_dict = request.GET 
     nm = query_dict.get('nm') 
     return self.model.objects.all().distinct('nm') 

我的最終目的是展示納米和使用 下面的查詢在Django管理接口計數。

select nm, count(*) from datagen_crawlmeta group by nm; 

回答

1

首先,代替使用

self.model.objects.values_list('nm', flat=True).distinct()self.model.objects.all().distinct('nm')

使用

self.model.objects.values('nm').distinct()

其次,寫Django的等效

select nm, count(*) from datagen_crawlmeta group by nm;

使用

self.model.objects.values('nm').annotate(count_nm=Count('nm')).values('nm','count_nm')

現在,使用這些,您可以操縱queryset函數並獲取管理中顯示的兩件事情。