将项目添加到购物车Django Python

乌诺

编辑当我单击添加到购物车时,这是输出到终端

[22/Mar/2016 07:07:44] "GET /store/add/7 HTTP/1.1" 302 0
[22/Mar/2016 07:07:44] "GET /store/ HTTP/1.1" 200 4888

我有两种功能,一种是将商品添加到购物车,另一种是移除商品。

我在想问题是我的网址请求格式不正确。因此,我要感谢比我更有经验的人向我解释预期的URL应该是什么。

我正在这样创建我的网址,

url(r'^add/(\d+)', views.add_to_cart, name='add_to_cart'),  
    url(r'^remove/(\d+)', views.remove_from_cart, name='remove_from_cart'),
    url(r'^cart/', views.cart, name='cart'),

将商品添加到购物车的链接位于base.html文件中,看起来像这样,

  {% if request.user.is_authenticated %}
         <span class="storefront_add_to_cart">
             <a href="{% url 'add_to_cart' book.id %}">[Add to Cart]</a>
         </span>
         {% endif %}

因此,当您在购物车中添加或删除商品时,它会调用相应的功能。

Views.py

def add_to_cart(request,book_id):
        if request.user.is_authenticated():
            try:
                book = Book.objects.get(pk=book_id)
            except ObjectDoesNotExist:
                pass
            else :
                try:
                    cart = Cart.objects.get(user = request.user, active = True)
                except ObjectDoesNotExist:
                    cart = Cart.objects.create(user = request.user)
                    cart.save()
                    cart.add_to_cart(book_id)
                    return redirect('cart')
                else:
                    return redirect('index')


def remove_from_cart(request, book_id):
    if request.user.is_authenticated():
        try:
            book = Book.objects.get(pk = book_id)
        except ObjectDoesNotExist:
            pass 
        else:
            cart = Cart.objects.get(user = request.user, active = True)
            cart.remove_from_cart(book_id)
        return redirect('cart')
    else:
        return redirect('index')

当我单击添加到购物车时,URL看起来像这样(这给了我错误)

http://localhost:8000/store/add/4

当我单击从购物车中删除时,URL看起来像这样,但没有收到任何错误。(购物车中的物品保持原状,不会移除。)

http://localhost:8000/store/cart/%7B%20url%20'remove_from_cart'%20item.book.id%20%%7D

如果有帮助的话,请访问models.py中的各个模型

class Cart(models.Model):
    user = models.ForeignKey(User)
    active = models.BooleanField(default=True)
    order_date = models.DateField(null=True)
    payment_type = models.CharField(max_length=100, null=True)
    payment_id = models.CharField(max_length=100, null=True)

    def __unicode__(self): 
            return "%s" % (self.user)

    def add_to_cart(self, book_id):
        book = Book.objects.get(pk=book_id)
        try:
            preexisting_order = BookOrder.objects.get(book=book, cart=self)
            preexisting_order.quantity += 1
            preexisting_order.save()
        except BookOrder.DoesNotExist:
            new_order = BookOrder.objects.create(
                book=book,
                cart=self,
                quantity=1
                )
            new_order.save()

            def __unicode__(self):
                return "%s" % (self.book_id)


    def remove_from_cart(self, book_id):
        book = Book.objects.get(pk=book_id)
        try:
            preexisting_order = BookOrder.objects.get(book=book, cart=self)
            if preexisting_order.quantity > 1:
                preexisting_order.quantity -= 1
                preexisting_order.save()
            else:
                preexisting_order.delete()
        except BookOrder.DoesNotExist:
            pass
布尔汉·哈立德(Burhan Khalid)

让我们一次解决这个问题。

首先,您需要使用login_required装饰器您也不应接受将无效的书籍添加到购物车(您目前正在数据库级别检查这些书籍,并且不会向客户显示此错误)。

from django.contrib.auth.decorators import login_required
from django.shortcuts import get_object_or_404

@login_required
def add_to_cart(request,book_id):
    book = get_object_or_404(Book, pk=book_id)
    cart,created = Cart.objects.get_or_create(user=request.user, active=True)
    cart.add_to_cart(book_id)
    return redirect('cart')

接下来,您需要在生成链接的位置修复模板,以从购物车中删除商品。您的链接应为:

<a href="{% url 'remove_from_cart' args=(item.book.id,) %}">Remove item</a>

在您的模型中,您有两种__unicode__方法,我认为这是复制粘贴中的错误,否则您需要从中删除第二种add_to_cart方法,由于第二种方法已经缩进了该方法中,所以第二种方法将无法使用models.py

无论如何,您都不需要该方法,应该将整个逻辑保留在视图中。这是修改后的方法:

from django.contrib.auth.decorators import login_required
from django.shortcuts import get_object_or_404
from django.contrib import messages

from .models import Cart, BookOrder, Book

@login_required
def add_to_cart(request,book_id):
    book = get_object_or_404(Book, pk=book_id)
    cart,created = Cart.objects.get_or_create(user=request.user, active=True)
    order,created = BookOrder.objects.get_or_create(book=book,cart=cart)
    order.quantity += 1
    order.save()
    messages.success(request, "Cart updated!")
    return redirect('cart')

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将项目添加到python中的购物车时如何将字典项目减少一

来自分类Dev

Python:将多种产品和价格添加到购物车

来自分类Dev

Python:将多种产品和价格添加到购物车

来自分类Dev

使用Selenium python将其添加到Amazon中的购物车

来自分类Dev

将项目添加到magento的购物车中

来自分类Dev

将项目添加到magento的购物车中

来自分类Dev

将项目添加到AngularJS的购物车中

来自分类Dev

将项目添加到购物车

来自分类Dev

无法添加到 reactjs 购物车中的项目

来自分类Dev

将多个自定义数据数组添加到WooCommerce自定义Ajax上的购物车项目中添加到购物车

来自分类Dev

将项目添加到购物车指令表单控制器

来自分类Dev

Woocommerce:如何将元数据添加到购物车项目?

来自分类Dev

php-从远程地址将项目添加到购物车

来自分类Dev

将现有项目添加到购物车(React-Redux)

来自分类Dev

将购物车项目添加到数据库并检索

来自分类Dev

单击时将特定项目添加到购物车

来自分类Dev

Ruby on Rails:尝试将项目添加到购物车时出错(使用订单项)

来自分类Dev

将属性添加到购物车

来自分类Dev

将产品添加到购物车WooCommerce?

来自分类Dev

将产品添加到购物车WooCommerce?

来自分类Dev

将商品添加到Paypal购物车

来自分类Dev

使用PHP将FedEx添加到购物车

来自分类Dev

localStorage 添加到购物车

来自分类Dev

WooCommerce添加到购物车验证:阻止添加到购物车

来自分类Dev

Laravel将具有相同产品的购物车按钮添加到+1数量的购物车中

来自分类Dev

单击 Woocommerce 后,将添加到购物车按钮更改为查看购物车按钮

来自分类Dev

添加到购物车按钮未在购物车中添加产品

来自分类Dev

添加到购物车按钮未在购物车中添加产品

来自分类Dev

快速添加变化并添加到购物车

Related 相关文章

  1. 1

    将项目添加到python中的购物车时如何将字典项目减少一

  2. 2

    Python:将多种产品和价格添加到购物车

  3. 3

    Python:将多种产品和价格添加到购物车

  4. 4

    使用Selenium python将其添加到Amazon中的购物车

  5. 5

    将项目添加到magento的购物车中

  6. 6

    将项目添加到magento的购物车中

  7. 7

    将项目添加到AngularJS的购物车中

  8. 8

    将项目添加到购物车

  9. 9

    无法添加到 reactjs 购物车中的项目

  10. 10

    将多个自定义数据数组添加到WooCommerce自定义Ajax上的购物车项目中添加到购物车

  11. 11

    将项目添加到购物车指令表单控制器

  12. 12

    Woocommerce:如何将元数据添加到购物车项目?

  13. 13

    php-从远程地址将项目添加到购物车

  14. 14

    将现有项目添加到购物车(React-Redux)

  15. 15

    将购物车项目添加到数据库并检索

  16. 16

    单击时将特定项目添加到购物车

  17. 17

    Ruby on Rails:尝试将项目添加到购物车时出错(使用订单项)

  18. 18

    将属性添加到购物车

  19. 19

    将产品添加到购物车WooCommerce?

  20. 20

    将产品添加到购物车WooCommerce?

  21. 21

    将商品添加到Paypal购物车

  22. 22

    使用PHP将FedEx添加到购物车

  23. 23

    localStorage 添加到购物车

  24. 24

    WooCommerce添加到购物车验证:阻止添加到购物车

  25. 25

    Laravel将具有相同产品的购物车按钮添加到+1数量的购物车中

  26. 26

    单击 Woocommerce 后,将添加到购物车按钮更改为查看购物车按钮

  27. 27

    添加到购物车按钮未在购物车中添加产品

  28. 28

    添加到购物车按钮未在购物车中添加产品

  29. 29

    快速添加变化并添加到购物车

热门标签

归档