Django管理后台访问和登录页面访问数据不一致的问题
Django管理后台访问和登录页面访问数据不一致的问题
问题现象
我再创建商品购物车功能后,发现这个功能页面需要放在管理后台。在测试功能时是直接配置路由访问http://localhost:8088/view_cart/是可以正常加载购物车的相关功能的,然后将购物车功能加到管理后台,添加之后发现没有查到任何数据。通过http://localhost:8088/view_cart/可以查看到购物车相关商品信息,通过http://localhost:8088/admin/goods_service/cart/查看为空。
代码配置
urlpatterns = [ path('view_cart/', view_cart, name='view_cart'), ] def add_to_cart(request, pk): product = get_object_or_404(Product, pk=pk) cart = request.session.get('cart', {}) cart[pk] = cart.get(pk, 0) + 1 request.session['cart'] = cart messages.success(request, f'{product.name}已添加到购物车') return redirect('list_product')
问题分析
通过路由直接访问可以访问购物车视图,而通过管理后台访问不到,那么就是获取数据源不一致的问题导致的。
从这个角度分析,然后Google了一下,就发现管理后台和正常视图访问的session不是同一个,就会出现这个问题。为了解决这个问题,我将数据保存到数据库进行处理,经过验证后台管理系统可以获取到购物车的信息了,再次的爬过一个坑。
解决方案
同时向会话和数据库中添加该数据,解决改问题。
def add_to_cart(request, pk): product = get_object_or_404(Product, pk=pk) #数据保存在session中 cart = request.session.get('cart', {}) cart[pk] = cart.get(pk, 0) + 1 request.session['cart'] = cart # 将商品添加到数据库的购物车表中 cart_item, created = Cart.objects.get_or_create(user=request.user, product=product) if not created: cart_item.quantity += 1 else: cart_item.quantity = 1 cart_item.save() messages.success(request, f'{product.name}已添加到购物车') return redirect('list_product')
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
2022-09-10 harbor备份还原