Ошибка атрибута при добавлении товара в корзину
Я некоторое время пытался понять, почему Django выбрасывает это AttributeError
при попытке добавить товар в корзину.
Ошибка выглядит следующим образом:
AttributeError: 'Basket' object has no attribute 'save'
Я просмотрел свой код, но не могу найти проблему. Я разместил необходимый код ниже.
basket/basket.py:
class Basket():
def __init__(self, request):
self.session = request.session
basket = self.session.get('skey')
if 'skey' not in request.session:
basket = self.session['skey'] = {}
self.basket = basket
def add(self, product, qty):
"""
Adding and updating the users basket session data
"""
product_id = str(product.id)
if product_id in self.basket:
self.basket[product_id]['qty'] = qty
else:
self.basket[product_id] = {'price': str(product.price), 'qty': qty}
self.save()
def __iter__(self):
"""
Collect the product_id in the session data to query the database
and return products
"""
product_ids = self.basket.keys()
products = Product.products.filter(id__in=product_ids)
basket = self.basket.copy()
for product in products:
basket[str(product.id)]['product'] = product
for item in basket.values():
item['price'] = Decimal(item['price'])
item['total_price'] = item['price'] * item['qty']
yield item
def __len__(self):
"""
Get the basket data and count the qty of items
"""
return sum(item['qty'] for item in self.basket.values())
basket/views.py:
def basket_summary(request):
basket = Basket(request)
return render(request, 'main_store/basket/summary.html', {'basket': basket})
def basket_add(request):
basket = Basket(request)
if request.POST.get('action') == 'post':
product_id = int(request.POST.get('productid'))
product_qty = int(request.POST.get('productqty'))
product = get_object_or_404(Product, id=product_id)
basket.add(product=product, qty=product_qty)
basketqty = basket.__len__()
response = JsonResponse({'qty': basketqty})
return response
script to add product - single_product.html:
<script>
$(document).on('click', '#add-button', function (e) {
e.preventDefault();
$.ajax({
type: 'POST',
url: '{% url "basket:basket_add" %}',
data: {
productid: $('#add-button').val(),
productqty: $('#select option:selected').text(),
csrfmiddlewaretoken: "{{csrf_token}}",
action: 'post'
},
success: function (json) {
document.getElementById("basket-qty").innerHTML = json.qty
},
error: function (xhr, errmsg, err) { }
});
})
</script>
Сначала я подумал, что это простой случай, когда что-то названо как basket
вместо заглавного Basket
. Но я думаю, что проблема может быть более глубокой.
Я буду очень признателен за любую помощь, и если потребуется дополнительная информация, пожалуйста, дайте мне знать, и я буду рад предоставить ее. Спасибо!
Метод add
вашего класса Basket содержит следующую строку:
self.save()
Однако в настоящее время класс Basket не имеет реализации метода save
. Он также не наследует его от какого-либо родительского класса.
Тот факт, что метод add
пытается выполнить метод класса, который не определен, объясняет вашу ошибку атрибута.