turbogears2 умножить цену и стоимость из строк запроса - PullRequest
0 голосов
/ 22 января 2019

Я знаю, что этот вопрос уже задавался, но я не мог понять идею, стоящую за ответами, так как я новичок в программировании, и почти все кажется мне новым.

Я пытаюсь умножить цену каждого ингредиента на его количество, чтобы получить его стоимость, а затем сложить стоимость всех ингредиентов, чтобы получить final_cost рецепта, и просмотреть его в моем html-шаблоне.

У меня есть запрос, который возвращает словарь ключей и значений из БД, и теперь я застрял с вычислениями и просмотра final_cost на HTML

@expose('recipe4.templates.newnew')
    def getTotalCost(self):
        i = Ingredient
        ic = Ingredient_Cost
        ri = Recipe_Info
        r = Recipe
        val = DBSession.query(i.ingredient_name, ic.Unit_of_Measure, ri.quantity, ic.price_K, ic.updated_at).filter \
        (r.recipe_name == "pancake",
         r.recipe_id == ri.recipe_id,
         ri.ingredient_id == i.ingredient_id,
         i.ingredient_id == ic.ingredient_id)

        dict(entries=val)
        final_cost=0
        for k,v in entries:
            price=entries.price_K
            qty=entries.quantity
            cost=price*qty
            final_cost+=cost

        return final_cost

Ответы [ 2 ]

0 голосов
/ 15 марта 2019

Я наконец решил свою проблему с помощью @amol и дальнейших исследований, и это работает для меня.

sub_cost=[ ]    
final_cost=[ ]  
for k in val:  #iterate through each row of tuples in the returned db object
    for v in k:  #iterate through each values of individual tuples
        price=k[3] #position of price in tuple
        qty=k[4]
        cost=price*qty
        sub_cost.append(cost)
        break #breaks the loop
final_cost.append(sum(sub_cost))
return dict(final_cost=final_cost)
0 голосов
/ 23 января 2019

Я не проверял код шаг за шагом, но общая идея кажется правильной. Основная проблема, которую я вижу, заключается в том, что вы открываете шаблон recipe4.templates.newnew, но не возвращаете словарь.

Всякий раз, когда вы открываете шаблон, действие контроллера должно вернуть словарь. Все ключи словаря будут доступны в шаблоне в виде переменных.

Так что вы должны сделать return dict(final_cost=final_cost), если вы хотите, чтобы final_cost был доступен в вашем шаблоне.

См. https://turbogears.readthedocs.io/en/latest/turbogears/templating.html#template-variables

...