2012-10-10 36 views
5

Hãy tưởng tượng tôi có mô hình sau:Nhận danh sách các lần xuất hiện + đếm trong một mô hình Django?

class Person(models.Model): 
    ...other stuff... 
    optional_first_name= models.CharField(max_length=50, blank=True) 

Làm thế nào tôi sẽ đi về cách viết một yêu cầu mà trả về một mảng trong những cái tên phổ biến nhất, theo thứ tự điều xảy ra giảm, với số lượng của họ, trong khi bỏ qua những cái tên có sản phẩm nào?

tức là cho một cơ sở dữ liệu với 13 Leslies, 8 Andys, 3 Aprils, 1 Ron và 18 người chưa xác định tên của họ, kết quả sẽ là:

[('leslie', 13), ('andy', 8), ('Tháng Tư', 3), ('ron', 1)]

gần nhất tôi có thể nhận được là bằng cách làm như sau:

q= Person.objects.all() 
q.query.group_by=['optional_first_name'] 
q.query.add_count_column() 
q.values_list('optional_first_name', flat= True) 

Nhưng nó vẫn không hoàn toàn những gì tôi muốn.

Trả lời

10

Sau khi đào một số, cuối cùng phát hiện ra:

Person.objects.values('optional_first_name').annotate(c=Count('optional_first_name')).order_by('-c') 
+2

Bạn cũng có thể muốn cho '.exclude (optional_first_name = '')' – okm

+0

làm thế nào để áp dụng một số bộ lọc để truy vấn này? như chỉ lọc tên bắt đầu bằng 'A' –

Các vấn đề liên quan