2016-06-23 11 views
0

Ich versuche, eine SUMPRODUCT Abfrage in django zu tun:"ungültig wörtliche für int() mit Basis 10" Ersten Fehler für DecimalField

merchandise_value = Product.objects.all()\ 
    .aggregate(merch_value=Sum(F('qty_ordered')*F('msrp'))) 

'msrp' ist ein DecimalField Feld (mit 2 decimal_places). 'qty_ordered' ist ein IntegerField. Auch wenn ich wie int(float(F('msrp'))) oder int(float(str(F('msrp')))) verrückte Dinge tun bekomme ich immer noch:

invalid literal for int() with base 10: 'F(msrp)' 

Andere ähnliche Fragen eine ähnliche Lösung vorzuschlagen, was ich verwendet habe. Was habe ich vermasselt? Und was noch wichtiger ist, warum gibt es einen Anruf an int() irgendwie in diese Zeile integriert? Ich habe nicht explizit int() genannt.

Antwort

0

Also, nehme ich in diesem Fall, dass Sie output_field=FloatField() explizit Sum zu benötigten Ausgangsdatentyp zu erhalten, weil Datenbankoperationen zwischen diesen beiden Datentypen können nicht entscheiden, rufen sollten:

from django.db.models import F, FloatField, Sum 
... 
merchandise_value = Product.objects.all()\ 
    .aggregate(merch_value=Sum(F('qty_ordered')*F('msrp'),output_field=FloatField())) 

Werfen Sie einen Blick auf diesen Django examples

+0

Ah, danke; Es ist hier erwähnt: https://docs.djangoproject.com/en/1.9/ref/models/expressions/#using-f-with-annotations – Escher

Verwandte Themen