Есть ли способ временно удалить элементы из сессии и снова добавить после выполнения кода

Я работаю над сайтом электронной коммерции, используя Django. Я пытаюсь добавить пользовательский заказ в сумку, что и происходит, однако теперь я не могу добавить другие товары в сумку, когда пользовательский заказ находится в сумке. Я подумал, что если я удалю custom_order из сессии, то это позволит выполнить другой код, чтобы добавить товары в сумку.

context.py

from decimal import Decimal
from django.conf import settings
from django.shortcuts import get_object_or_404
from products.models import Product
from custom_order.models import CustomOrder

def bag_contents(request):

    bag_items = []
    total = 0
    bag = request.session.get('bag', {})

    print(bag)
     
    if 'custom_order' in bag:
        custom_order_id = bag['custom_order'] 
        custom_order = CustomOrder.objects.get(pk=custom_order_id)
        total += custom_order.price
        bag_items.append({
            'product_id': custom_order.product_id,
            'custom_order_id': custom_order_id,
            'category': custom_order.category,
            'material': custom_order.material,
            'individual_total': custom_order.price,
            'quantity': 1,
            'product_name': custom_order.product_name
        })
    else:
        for product_id, quantity in bag.items():
            product = Product.objects.get(pk=product_id)
            if isinstance(quantity, int) and isinstance(product.price, Decimal):
                total += quantity * product.price
                individual_total = quantity * product.price
                product_count += quantity
                bag_items.append({
                'product_id': product_id,
                'quantity': quantity,
                'product': product,
                'individual_total': individual_total,
            })
    
    grand_total = total
    

    context = {
        'bag_items': bag_items,
        'grand_total': grand_total,
    }

    return context

Просмотр для добавления товара в сумку

def add_to_bag(request, product_id):
    """ Add a quantity of the specified product to the shopping bag """
    quantity = int(request.POST.get('quantity'))
    redirect_url = request.POST.get('redirect_url')
    
    bag = request.session.get('bag', {})

    if product_id in list(bag.keys()):
        bag[product_id] += quantity
    else:
        bag[product_id] = quantity

    request.session['bag'] = bag
    return redirect(redirect_url)

просмотр для добавления custom_order в сумку

def add_custom_order_to_bag(request, custom_order_id):
    """ Add a quantity of the specified product to the shopping bag """
    custom_order = CustomOrder.objects.get(pk=custom_order_id)
    bag = request.session.get('bag', {})

    bag['custom_order'] = custom_order_id
   
    request.session['bag'] = bag
    return redirect(reverse('view_bag'))

Я пробовал следующее:

def add_to_bag(request, product_id):
    """ Add a quantity of the specified product to the shopping bag """
    quantity = int(request.POST.get('quantity'))
    redirect_url = request.POST.get('redirect_url')
    
    bag = request.session.get('bag', {})

    custom_order_id = bag.pop('custom_order', None)

    if product_id in list(bag.keys()):
        bag[product_id] += quantity
    else:
        bag[product_id] = quantity

    if custom_order_id:
        bag['custom_order'] = custom_order_id

    request.session['bag'] = bag
    return redirect(redirect_url)

но это не работает, я не получаю никаких ошибок, поэтому думаю, что логика может быть нарушена!

Вернуться на верх