@Tryggvi

Как сделать добавление в корзину из общего каталога?

Всем привет.

Есть добавление товара в подробном рассмотрении товара:
#views.py
def ProductDetail(request, id, slug):
    product = get_object_or_404(Product, id=id, slug=slug, available=True)
    cart_product_form = CartAddProductForm()
    return render_to_response('catalog/allCatalog/BaseProduct.html',
                             {'product': product,
                              'cart_product_form': cart_product_form})


Шаблон
<form action="{% url 'cart:CartAdd' product.id %}" method="post">
            <label class="cart_quantity" for="id_quantity">Количество:</label>
            {% csrf_token %}
            {{ cart_product_form }}
            
            <input class="product_details_basket vcenter text-center" type="submit" value="Добавить в корзину">
          </form>


В общем каталоге товаров они рендерятся так:

class catalog_infrared(ListView):
    model = Product
    template_name = 'catalog/product_list.html'
    context_object_name = 'product'  # Default: object_list
    paginate_by = 9
    queryset = Product.objects.all().order_by('price').filter(category__name='Теплый пол', categorysub__name='пленочный')

class catalog_mats_devi(ListView):
    model = Product
    template_name ='catalog/product_list.html'
    context_object_name = 'product'  # Default: object_list
    paginate_by = 9
    queryset = Product.objects.all().order_by('price').filter(category__name='Теплый пол', categorysub__name='нагревательный мат', brand__name='Devi')


Но если я подставляю такую же форму, как и в подробном рассмотрении товара, в общий каталог то добавление в корзину не происходит. Просто происходит переход в корзину.
[21/May/2018 21:04:17] "POST /cart/add/38/ HTTP/1.1" 302 0
[21/May/2018 21:04:17] "GET /cart/ HTTP/1.1" 200 4349


Как я понял нужно передать id в ListView, либо можно достать его из URL или как это можно реализовать?
  • Вопрос задан
  • 521 просмотр
Решения вопроса 2
leahch
@leahch
3D специалист. Dолго, Dорого, Dерьмово.
Скорее всего, да и лучше, в корзину добавлять не через форму, а через ajax! Другими словами - через javascript методом POST или PUT с передачей в теле JSON
Ответ написан
@immaculate
Программист-путешественник
Информации недостаточно для ответа. В частности, не приведен код формы.

А вообще, у вас колоссальные проблемы с кодом. Мешанина из function-based и class-based views. Каша с `id` и `slug` — обычно и то и другое поле уникальны, и достаточно использовать одно — либо `id`, либо `slug`.

Нарушения PEP-8, в частности, в коде Python традиционно принято, что названия классов начинаются с большой буквы и используют CamelCase вместо подчеркивания.

Иметь отдельный класс на каждый отдельный бренд и категорию — это тоже очень плохо. Это куча дублирующегося кода, который практически ничем не отличается. Правильнее передавать категорию в параметрах и иметь один класс для различных категорий и брендов.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы