Django

2011-02-04 11 views
14

'da .annotate() tarafından oluşturulan alanlar üzerinde .extra() kullanımı Tablodaki her nesne için iki alanın (toplamaların kendileri) toplamını almak istiyorum.Django

şu sonra daha iyi ben olduğum şey biraz tarif edebilir ancak Unknown column in field list -hata sonuçları:

items = MyModel.objects.annotate(
       field1=Sum("relatedModel__someField"), 
       field2=Sum("relatedModel__someField")).extra(
         select={"sum_field1_field2": "field1 + field2"}) 

Ben de saha aramaları için F() kullanarak denedi ama bu beni geçersiz sql deyimi verir .

Bunu nasıl çözeceğinizle ilgili herhangi bir fikir çok takdir edilmektedir.

+0

'Bilinmeyen sütun' hatasının 'ek açıklama' yerine 'ek açıklama' anlamına geldiğinden emin misiniz? Gerilimi göster lütfen. –

+0

Sorgu, yalnızca "açıklama" kullanıldığında düzgün çalışır: her iki toplam, döndürülen nesnelerin alanları olarak eklenir. Sadece 'extra' kullanıldığında istisna kaldırılır. – jnns

+1

+1: Aynı probleme sahip olmak, hala bir çözüm bulamadı! –

cevap

4

bunu istediğiniz şey nedir?

items = MyModel.objects.extra(
    select = {'sum_field1_field2': 'SUM(relatedModel__someField) + SUM(relatedModel__someField)'}, 
) 
+0

Bu soruna rastladığımdan beri bir süre geçti ama bu uygun bir çözüm gibi görünüyor! Teşekkür ederim. – jnns

+1

Birçok ilişki için bunu yapamıyorum. –

+0

Hii SUM içinde koşul eklemek mümkün mü ?? örneğin "SUM (relatedModel__someField = True)" –

0

aşağıdaki kullanabilir, birçok veya birçok kimse için (ters) ilişkiler için birçokları için çalışmasını sağlamak için:

items = MyModel.objects.extra(
    select = {'sum_field1_field2': 'SUM("relatedModel"."someField") + SUM("relatedModel"."someField")'}, 
    ) 

Ama başka annotate gerekirse böyle de kıracak Bir sayım için fazladan açıklama GROUP BY deyimine eklenir, çünkü toplama işlevlerine burada izin verilmez.