Django管理后台访问和登录页面访问数据不一致的问题

发布时间 2023-09-10 21:14:17作者: 九尾cat

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')