( Güncelleme : Tam ORM toplama desteği artık Django 1.1'e dahil edilmiştir . Özel API'lerin kullanımıyla ilgili aşağıdaki uyarıya uygun olarak, burada belgelenen yöntem artık Django'nun 1.1 sonrası sürümlerinde çalışmamaktadır. Nedenini anlamak için araştırmadım; 1.1 veya sonraki bir sürümdeyseniz, yine de gerçek toplama API'sini kullanmalısınız .)
Çekirdek toplama desteği 1.0'da zaten vardı; sadece belgelenmemiş, desteklenmiyor ve henüz uyumlu bir API'ye sahip değil. Ancak 1.1 gelene kadar bunu nasıl kullanabileceğiniz aşağıda açıklanmıştır (kendi sorumluluğunuzdadır ve query.group_by özniteliğinin genel bir API'nin parçası olmadığını ve değişebileceğini bilerek):
query_set = Item.objects.extra(select={'count': 'count(1)'},
order_by=['-count']).values('count', 'category')
query_set.query.group_by = ['category_id']
Daha sonra sorgu_ kümesi üzerinde yinelerseniz, döndürülen her değer bir "kategori" anahtarı ve bir "sayı" anahtarı olan bir sözlük olacaktır.
Burada -count'a göre sipariş vermek zorunda değilsiniz, bu sadece nasıl yapıldığını göstermek için dahil edilmiştir (sorgu kümesi oluşturma zincirinin başka bir yerinde değil, .extra () çağrısında yapılması gerekir). Ayrıca count (1) yerine count (id) de diyebilirsiniz, ancak ikincisi daha verimli olabilir.
.Query.group_by'yi ayarlarken, değerlerin Django alan adları ('kategori') değil gerçek DB sütun adları ('kategori_kimliği') olması gerektiğini de unutmayın. Bunun nedeni, sorgu içlerini Django terimleriyle değil, her şeyin DB açısından olduğu bir düzeyde ince ayarlamanızdır.