store boolean data type in session, always return true during insert

20 views
Skip to first unread message

黄祥

unread,
Feb 6, 2016, 2:16:56 AM2/6/16
to web2py-users
why during store boolean data type in session, always return true during insert?
e.g. problem
for counter, (id, quantity, length_in_cm, width_in_cm, total_square_meter, bevel, gosok_halus) in session.delivery_order_detail.items():
db.delivery_order_detail.insert(delivery_order_no = delivery_order_id, 
product = id, 
quantity = quantity, 
length_in_cm = length_in_cm, 
width_in_cm = width_in_cm, 
total_square_meter = total_square_meter, 
bevel = bevel,
gosok_halus = gosok_halus)
e.g. solve
for counter, (id, quantity, length_in_cm, width_in_cm, total_square_meter, bevel, gosok_halus) in session.delivery_order_detail.items():
if bevel == 'None' and gosok_halus == 'None':
db.delivery_order_detail.insert(delivery_order_no = delivery_order_id, 
product = id, 
quantity = quantity, 
length_in_cm = length_in_cm, 
width_in_cm = width_in_cm, 
total_square_meter = total_square_meter, 
bevel = False,
gosok_halus = False)
elif bevel == 'on' and gosok_halus == 'None':
db.delivery_order_detail.insert(delivery_order_no = delivery_order_id, 
product = id, 
quantity = quantity, 
length_in_cm = length_in_cm, 
width_in_cm = width_in_cm, 
total_square_meter = total_square_meter, 
bevel = True,
gosok_halus = False)
elif bevel == 'None' and gosok_halus == 'on':
db.delivery_order_detail.insert(delivery_order_no = delivery_order_id, 
product = id, 
quantity = quantity, 
length_in_cm = length_in_cm, 
width_in_cm = width_in_cm, 
total_square_meter = total_square_meter, 
bevel = False,
gosok_halus = True)
elif bevel == 'on' and gosok_halus == 'on':
db.delivery_order_detail.insert(delivery_order_no = delivery_order_id, 
product = id, 
quantity = quantity, 
length_in_cm = length_in_cm, 
width_in_cm = width_in_cm, 
total_square_meter = total_square_meter, 
bevel = True,
gosok_halus = True)

i must manually explicit using if condition about the boolean value (bevel, gosok_halus), is it normal, or is there any better way rather than this one?
thanks and best regards,
stifan

Anthony

unread,
Feb 6, 2016, 2:51:41 AM2/6/16
to web2py-users
Based on your code, it appears the values of bevel and gosok_halus are not in fact boolean but are the string values "on" or "None". You haven't shown how the values were put into the session, so if you were expecting them to be booleans, it's hard to say why they are not.

In any case, you can greatly simplify your code as follows:

for counter, (id, quantity, length_in_cm, width_in_cm, total_square_meter, bevel, gosok_halus) in session.delivery_order_detail.items():
   db.delivery_order_detail.insert(delivery_order_no = delivery_order_id,
                                    product = id,
                                    quantity = quantity,
                                    length_in_cm = length_in_cm,
                                    width_in_cm = width_in_cm,
                                    total_square_meter = total_square_meter,
                                    bevel = True if bevel == 'on' else False,
                                   gosok_halus = True if gosok_halus == 'on' else False)

Anthony

黄祥

unread,
Feb 6, 2016, 3:48:08 AM2/6/16
to web2py-users
that's work perfectly, thank you so much, anthony, never thought that the insert to database table can use if conditional explicitly. 
another work around, i found the root cause, it is because the value of the boolean type when assigned to session. 
i confuse the boolean value (in controllers, views, database and models). in database the boolean data type have the value rather T or F, during using insert to database table it use the value True, False or leave it empty, in form in the controllers and views it use the value 'on', None, 'None' or ''

thanks and best regards,
stifan
Reply all
Reply to author
Forward
0 new messages