2015-10-26 1 views
1

У меня есть сомнение в том, как показать результат для «чистой маржи» в html, который является результатом net_profit/sales. Я не хочу напрямую размещать это подразделение в html напрямую, потому что из этого есть много других сложных вычислений.Django- неподдерживаемый тип операндов для /: 'dict' и 'dict'

Так как я могу поставить этот результат деления в обоих views.py и HTML?

Следующий код возвращает ошибку, как название.

views.py

def get_context_data(self, **kwargs): 
     context = super(XXXView, self).get_context_data(**kwargs) 
     context["sales"] = self.get_queryset().aggregate(Sum('sales')) 
     context["net_profit"] = self.get_queryset().aggregate(Sum('net_profit')) 

     context["net_margin"] = context["net_profit"]/context["sales"] ---if here correct--? 

HTML

to show result for sales: {{sales.sales__sum}} 
to show result for net_profit: {{net_profit.net_profit__sum}} 
how to show result for "net margin"? 

ответ

1

Ваш запрос не получает возвращает числовое значение, но словарь:

context["sales"] = self.get_queryset().aggregate(Sum('sales')) 
#{'sales__sum': Decimal('123123')}  
context["net_profit"] = self.get_queryset().aggregate(Sum('net_profit')) 
#{'net_profit__sum': Decimal('123123')} 

Вы должны фильтровать ловя словарное значение:

result = context['sales']['sales__sum']/context['net_profit']['net_profit__sum'] 
+0

Привет @Puam Dias, я получил ошибку типа «неподдерживаемый тип операндов для /:« Десятичный »и« float », но в models.py я уже объявлял оба« десятичным », почему эта ошибка все еще появляется? –

+0

Вы управляли миграциями и вытирали pyc? Как ваша модель? –

+0

Привет @ Puam Dias, я перезапустил миграцию, все поля данных определены как десятичные в моей модели. –

2

Если так:

sales = context['sales'] 
net_profit = context['net_profit'] 

продажи и net_profit являются объектом. Таким образом, html show net margin равен {{ sales.sale__sum/ net_profit.net_profit__sum }}

Шаблон django может использовать cal of numbers.

+0

Привет @ xiaohen, что если я не хочу к сложной форме в шаблоне? Поскольку у меня есть другой длинный формуляр, если я ставил шаблон, я боюсь, что это замедлит скорость. –

+0

А также, если я следую вашему примеру, я получил эту ошибку «Не смог разобрать остаток .....» –

+0

, так что я хочу знать тип продаж и net_profit. Является ли список или объект? и sales__sum является целым числом? – xiaohen

Смежные вопросы