У объекта 'str' нет атрибута 'get', AttributeError в / add-to-cart / shirt - PullRequest
0 голосов
/ 25 февраля 2020

Я получаю вышеуказанную ошибку после выравнивания некоторых модификаций в моделях и представлениях, и вот соответствующий код:

def add_to_cart(request, slug):
    item = get_object_or_404(Item, slug=slug)
    order_item, created = OrderedItems.objects.get_or_create(
        item=item,
        user=request.user,
        ordered=False
    )
    order_qs = Order.objects.filter(user=request.user, ordered=False)
    if order_qs.exists():
        order = order_qs[0]
        # check if the order item is in the order
        if order.items.filter(item__slug=item.slug).exists():
            order_item.quantity += 1
            order_item.save()
            messages.info(request, "This item quantity was updated.")
            return reverse('core:product_detail', kwargs={'slug': slug})
        else:
            order.items.add(order_item)
            messages.info(request, "This item was added to your cart.")
            return reverse('core:product_detail', kwargs={'slug': slug})
    else:
        ordered_date = timezone.now()
        order = Order.objects.create(
            user=request.user, ordered_date=ordered_date)
        order.items.add(order_item)
        messages.info(request, "This item was added to your cart.")
        return reverse('core:product_detail', kwargs={'slug': slug})

трассировка кажется очень расплывчатой:

Traceback:

File "C:\Users\pytuts\.virtualenvs\ecommerce_only-Npoh1MB8\lib\site-packages\django\core\handlers\exception.py" in inner
  34.             response = get_response(request)

File "C:\Users\pytuts\.virtualenvs\ecommerce_only-Npoh1MB8\lib\site-packages\django\utils\deprecation.py" in __call__
  96.             response = self.process_response(request, response)

File "C:\Users\pytuts\.virtualenvs\ecommerce_only-Npoh1MB8\lib\site-packages\django\middleware\clickjacking.py" in process_response
  26.         if response.get('X-Frame-Options') is not None:

Exception Type: AttributeError at /add-to-cart/shirt/
Exception Value: 'str' object has no attribute 'get'

и urls.py выглядит так:

path('add-to-cart/<slug:slug>/', add_to_cart, name='add_to_cart'),

1 Ответ

0 голосов
/ 25 февраля 2020

Ну, reverse(...) возвращает строку, которая является URL для определенного имени. Но вам нужно вернуть Http response из вида, как, например, HttpResponseRedirect:

from django.http import HttpResponseRedirect
...

return HttpResponseRedirect(reverse('core:product_detail', kwargs={'slug': slug}))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...