Ошибка типа в / добавить в корзину / 1/

#django #django-views #django-errors

#django #django-просмотры #django-ошибки

Вопрос:

мое добавление в корзину работало нормально, и когда я повторяю попытку через несколько страниц, я получаю сообщение об ошибке TypeError в /add-to-cart/1/ add_to_cart() отсутствует 1 требуемый позиционный аргумент: ‘запрос’

 My view:
def add_to_cart(LoginRequiredMixin, request, slug):
    item = get_object_or_404(Item, slug=slug)
    order_item, created = OrderItem.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 redirect("core:order-summary")
        else:
            order.items.add(order_item)
            messages.info(request, "This item was added to your cart.")
            return redirect("core:order-summary")
    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 redirect("core:order-summary")

  

my url:
urlpatterns = [
    path('add-to-cart/<slug>/', add_to_cart, name='add_to_cart'),
]


Not sure what went wrong, help please.
  

Ответ №1:

Вы не можете использовать LoginRequiredMixin mixin [Django-doc] в качестве параметра, это функция, а не класс. Mixin Смешивается в порядке разрешения метода (MRO) класса. Вы можете использовать @login_required декоратор [Django-doc] для функции:

 from django.contrib.auth.decorators import login_required

@login_required
def add_to_cart(request, slug):
    # …  

Вы также можете ограничить slug параметр, чтобы он совпадал только с допустимыми фрагментами с помощью:

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