Джанго - нулевая агрегация - PullRequest
0 голосов
/ 16 марта 2019

В моем views.py есть следующее:

called = CashFlow.objects.filter(item__slug=itemslug).filter(type='cashin').aggregate(sum=Sum('amount'))['sum']

distributed = CashFlow.objects.filter(item__slug=itemslug).filter(type='cashout').aggregate(sum=Sum('amount'))['sum']

try:
   result = round(-distributed/called * 100,2)
except ZeroDivisionError :
   result = 0

Все работает нормально, пока один из запросов возвращает что-то.но, скажем, пока не было никаких выводов -> результат должен быть нулевым.Тем не менее, я получаю следующее Typerror: «неверный тип операнда для унарного -: 'NoneType'"

Как я могу решить эту проблему?

большое спасибо заранее

Ответы [ 2 ]

1 голос
/ 16 марта 2019

Добавьте это перед попыткой / кроме:

if distributed is None:
    distributed = 0

Или добавить or 0 после запроса CashFlow:

distributed = (CashFlow.objects
    .filter(item__slug=itemslug)
    .filter(type='cashout')
    .aggregate(sum=Sum('amount'))['sum']) or 0

Сделайте то же самое с called.

1 голос
/ 16 марта 2019

Добавьте TypeError к вашим исключениям в except

try:
   result = round(-distributed/called * 100,2)
except (ZeroDivisionError, TypeError) as e :
   result = 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...