我正在尝试使用字典实现一个简单的购物车
{ITEM_ID:数量}
@dajaxice_register
def inc_items(request, item_id):
item_id=int(item_id)
print "ITEMID: ", item_id
#cart is a list of items {(id:qty)}
dajax=Dajax()
if 'cart' not in request.session :
request.session['cart']={}
cart = request.session['cart']
if item_id not in cart:
cart[item_id]=0
cart[item_id] += 1
print "CART:", cart
request.session['cart']=cart
request.session.modified = True
request.session.save()
count=sum(cart.values())
dajax.assign('#cart_items', 'innerHTML', str(count))
我尝试使用文档中提到的request.session.modified 无论如何,我收到一个非常奇怪的结果
CART: {u'1': 1, 1: 1, u'3': 1, u'2': 1}
注意:我明确地将item_id强制转换为整数,所以我不知道字符串键的来源!
注意:购物车对象也不会超过4个键!
提前致谢
答案 0 :(得分:2)
会话使用的默认序列化是JSON格式。 JSON只允许字符串作为键,因此当数据保存到数据库时,所有整数键都转换为字符串。加载数据时,它们是整数的事实会丢失,而键是纯字符串(嗯,unicode字符串)。
最简单的解决方案是在会话数据键中专门使用字符串,并仅将它们转换为整数以进行进一步处理。