Есть ли способ временно удалить элементы из сессии и снова добавить после выполнения кода
Я работаю над сайтом электронной коммерции, используя 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)
но это не работает, я не получаю никаких ошибок, поэтому думаю, что логика может быть нарушена!