Ошибка атрибута при добавлении товара в корзину

Я некоторое время пытался понять, почему 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 пытается выполнить метод класса, который не определен, объясняет вашу ошибку атрибута.

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