Bir anket uygulaması için, product_code
, Count()
ve ürün derecelendirme> 3 ürün her bir ürün derecelendirmesi ("Product_r
") nesnesini (product_code
numaralı grupta) propritesini istiyorum.Django'da bir filtre sorgusunda açıklamalı bir oran nasıl hesaplanır?
Son açıklama ifadesinde bir hesaplama ile kurtulmayı umuyordum, ama öyle değil.
q = Product_r.objects.all()\
.annotate(product_code=F('fk_product__product_code'))\
.values('product_code')\
.annotate(count=Count('id'))\
.annotate(proportion=Count(score__gt=3)/count)
aşağıdaki girişimi çalışma ya (count
tanımlanmamıştır yakınıyor ve ayrıca oranını hesaplar bütün sorgu, sadece takip eden Annotatesekmesindeki parçası filtreler) değildir:
q = Product_r.objects.all()\
.annotate(product_code=F('fk_product__product_code'))\
.values('product_code')\
.annotate(count=Count('id'))\
.filter(score__gt=3)\
.annotate(proportion=Count('id')/count)
Sorguyu iki kez kodlamadan (bunlardan biri score__gt=3
filtrelemeden) ve sonra iki count
değerini bölen bir yol var mı? This blog post, bu tür bir şey için ham SQL kullanmaktadır - umarım buradaki durumumdan kaçınmak mümkündür.
Saymayı deneyin ('id')/F ('count') '. Çalışacağından emin değilim, ancak tanımlanmayan sayımla ilgili hatayı durduracak. – Alasdair
Haklısın sağol, hatayı durdu. Sorgu yine de doğru çıktıyı üretmez - filtre tüm sorgu için geçerlidir, tüm oranlar eşittir "Sayım (her şey)/Sayım (her şey)" yani 1. – Escher