Сессии в Django/Python
Здравствуйте. Пишу корзину на Djnago. В сессию должны записываться данные о товаре, но возникает проблема. Ошибок нет, но не совсем добавляет товар.
Вот функции во views.py
```
def basket_view(request):
if not request.user.is_authenticated:
basket = BasketClass
return render(request, 'basketapp/basket.html', {'cart': basket})
else:
title = 'корзина'
basket_items = Basket.objects.filter(user=request.user).order_by('product__category')
print(basket_items)
content = {
'title': title,
'basket_items': basket_items,
}
return render(request, 'basketapp/basket.html', content)
def basket_add(request, pk):
if request.user.is_authenticated:
if 'login' in request.META.get('HTTP_REFERER'):
return HttpResponseRedirect(reverse('products:product', args=[pk]))
product = get_object_or_404(Product, pk=pk)
old_basket_item = Basket.objects.filter(user=request.user, product=product)
if old_basket_item:
old_basket_item[0].quantity += 1
old_basket_item[0].save()
else:
new_basket_item = Basket(user=request.user, product=product)
new_basket_item.quantity += 1
new_basket_item.save()
return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
else:
if request.method == 'POST':
basket = BasketClass(request)
product = get_object_or_404(Product, pk=pk)
print(product)
form = BasketAddProductForm(request.POST)
basket.add(product=product)
print(basket.add(product=product))
content = {'cart':basket}
return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
Класс basket.py
from decimal import Decimal
from django.conf import settings
from .models import Product
class BasketClass(object):
from decimal import Decimal
from django.conf import settings
from .models import Product
class BasketClass(object):
def __init__(self, request):
"""
Инициализируем корзину
"""
self.session = request.session
basket = self.session.get(settings.CART_SESSION_ID)
if not basket:
# save an empty cart in the session
basket = self.session[settings.CART_SESSION_ID] = {}
self.basket = basket
def add(self,product, quantity=1, update_quantity=False):
product_id = str(product.id)
if product_id not in self.basket:
self.basket[product_id] = {'quantity': 0,
'price': str(product.price)}
if update_quantity:
self.basket[product_id]['quantity'] = quantity
else:
self.basket[product_id]['quantity'] += quantity
self.save()
def save(self):
# Обновление сессии cart
self.session[settings.CART_SESSION_ID] = self.cart
# Отметить сеанс как "измененный", чтобы убедиться, что он сохранен
self.session.modified = True
def remove(self,product):
product_id = str(product.id)
if product_id in str(product.id):
del self.basket[product_id]
self.save()
def __iter__(self):
"""
Перебор элементов в корзине и получение продуктов из базы данных.
"""
product_ids = self.cart.keys()
# получение объектов product и добавление их в корзину
products = Product.objects.filter(id__in=product_ids)
for product in products:
self.cart[str(product.id)]['product'] = product
for item in self.cart.values():
item['price'] = Decimal(item['price'])
item['total_price'] = item['price'] * item['quantity']
yield item
def __len__(self):
return sum(item['quantity'] for item in self.cart.values())
def get_total_cost(self):
return sum(Decimal(item['price']) * item['quantity'] for item in
self.cart.values())
def clear(self):
del self.session[settings.CART_SESSION_ID]
self.session.modified = True
Подскажите, пожалуйста. Передается почему-то None
07 февраля 2019 в 07:15