Hi everyone. I just came across a weird behavior and I'm wondering if it's
some kind of bug or just my fault.
I have a model for a product like this:
db.define_table('products',
Field('name',length=128, notnull=True),
Field('sale_price',type='decimal(14,4)',default=0, notnull=True))
Now when the user adds a product to the cart I'm storing the row for the
product in a dictionary in the session like this:
session.cart[product.id] = product
finally the view that displays it lets you pick among several payment
options and based on the option it multiplies the price by another number
like this:
{{=session.cart[id].sale_price * session.payment_factor}}
Both sale price and payment factor are store in DB as decimal(14,4). The
first time the code is run the view executes correctly. But when you add
another product to the cart, or modify any other thing that requires a
reload or repost of the page I get an error like this:
TypeError: unsupported operand type(s) for *: 'float' and 'Decimal'
So what is happening is that after the first time my variable which is
store in the session and that should be treated like a Decimal is being
returned as a float. This is happening in the development environment with
SQLite, I have not tested this yet under MySQL. I think it is caused by the
fact that SQLite stores decimals as float, buy I wonder why does the first
time it is transformed to Decimal, and then just used as a float? And I
wonder if I must manually converted them to Decimal every time I use this
variables.
Hope someone can help.