( Cập nhật : Hỗ trợ tổng hợp ORM đầy đủ hiện được bao gồm trong Django 1.1 . Đúng như cảnh báo bên dưới về việc sử dụng các API riêng tư, phương pháp được ghi ở đây không còn hoạt động trong các phiên bản Django sau 1.1. Tôi chưa tìm hiểu lý do tại sao; nếu bạn đang ở phiên bản 1.1 trở lên, bạn vẫn nên sử dụng API tổng hợp thực .)
Hỗ trợ tổng hợp cốt lõi đã có trong phiên bản 1.0; nó chỉ là không có giấy tờ, không được hỗ trợ và chưa có một API thân thiện. Nhưng đây là cách bạn có thể sử dụng nó cho đến khi 1.1 đến (bạn có thể tự chịu rủi ro và hoàn toàn biết rằng thuộc tính query.group_by không phải là một phần của API công khai và có thể thay đổi):
query_set = Item.objects.extra(select={'count': 'count(1)'},
order_by=['-count']).values('count', 'category')
query_set.query.group_by = ['category_id']
Sau đó, nếu bạn lặp lại query_set, mỗi giá trị trả về sẽ là một từ điển với khóa "danh mục" và khóa "đếm".
Bạn không cần phải sắp xếp theo -count ở đây, nó chỉ được bao gồm để chứng minh cách nó được thực hiện (nó phải được thực hiện trong lệnh gọi .extra (), không phải ở nơi khác trong chuỗi xây dựng queryset). Ngoài ra, bạn cũng có thể nói count (id) thay vì count (1), nhưng sau này có thể hiệu quả hơn.
Cũng lưu ý rằng khi đặt .query.group_by, các giá trị phải là tên cột DB thực ('category_id') chứ không phải tên trường Django ('category'). Điều này là do bạn đang điều chỉnh nội bộ truy vấn ở mức mà mọi thứ đều theo điều kiện DB, không phải điều khoản Django.