2017-02-11 1 views
0

Permettez-moi de vous montrer une situation comme celle-ci:Les expressions conditionnelles sur des données numériques - Python/Django

data = [Station.objects 
         .filter(nr=form.cleaned_data['station']) 
         .aggregate(avg=Avg('residual'), 
            stdev=StdDev('residual'), 
            number=Count('residual'), 
            good_observations = Count(Case(When(abs('residual')<250))), 
            outliers=Count(Case(When(abs('residual')>=250))), 
            )] 

Je veux compter les lignes de base de données avec « résiduelle » (valeur flottante) inférieure ou supérieure à 250 mais ne fonctionne pas.

tout d'abord: J'ai la TypeEror:

initialisation() prend soit un objet Q ou lookups comme arguments de mot-clé

En second lieu:

abs () function ne fonctionne pas en raison de TypeError et de la valeur de chaîne en tant qu'entrée.

J'espère que certains d'entre vous pourrait me aider avec ce problème :)

Répondre

0

Comme il est dit dans le message d'erreur, le __init__ de When prend args mot-clé ou Q objects, très semblable à QuerySet.filter. Vous pouvez pouvez mimick abs en utilisant Q objets:

When(Q(residual__lt=250) & Q(residual__gt=-250)) # -250 < residual < 250 
When(Q(residual__gte=250) | Q(residual__lte=-250)) # other cases 
+0

Oui, il résout le problème avec TypeError mais les deux résultats de comptage montrent: 0 ce qui est impossible quand premier chef d'accusation appelé « numéro » indique par exemple 210 – dekarz