首页 > 解决方案 > /add/4/ 'Item' 对象的 AttributeError 没有属性 'filter'

问题描述

在 /add/4/ 'Item' 对象没有属性 'filter'处收到错误 AttributeError

if order.item.filter(item__id = item.id).exists():

我正在尝试将基于 id 的项目添加到购物车中。该项目正在添加到购物车表中,但显示上述错误。

我的意见.py

@login_required(login_url='/login/')
def add_to_cart1(request, id):
    item = get_object_or_404(Item, id=id)
    order_item, created = CartItem.objects.get_or_create(
         item=item,
        user=request.user,
    )
    order_qs = CartItem.objects.filter(user=request.user, ordered=False)
    if order_qs.exists():
        order = order_qs[0]
        if order.item:
            if order.item.filter(item__id = item.id).exists():
                order_item.quantity += 1
                order_item.save()
                messages.success(request, "Item qty was updated.")
                return redirect("ItemAddedToCart")
            else:
                order.item.add(order_item)
                messages.success(request, "Item was added to your cart.")
                return redirect("ItemAddedToCart")
    else:
        order = CartItem.objects.create(
            user=request.user,  )
        order.item.add(order_item)
        messages.success(request, "Item was added to your cart.")
    return redirect("ItemAddedToCart")

我的模型.py

class CartItem(models.Model):
    user = models.ForeignKey(AUTH_USER_MODEL, null=True, on_delete=models.CASCADE)
    item    = models.ForeignKey(Item, null=True, on_delete=models.CASCADE)
    created_at = models.DateTimeField(auto_now_add=True ,null=True)
    updated_at = models.DateTimeField(auto_now=True ,null=True)
    quantity = models.IntegerField(default=1)
    ordered = models.BooleanField(default=False)

标签: pythondjangodjango-views

解决方案


您的模型创建一个 FK to Item,这意味着每个CartItem实例都有一个对单个项目的引用。

从您的问题中不清楚过滤器的设计目的是什么,但看起来您只是想获取与Item此卡片项目相关的对象 ( )。

您可能正在寻找一个看起来有点像这样的代码块:

order_qs = CartItem.objects.filter(user=request.user, ordered=False)
for cart_item in order_qs:
    if cart_item.item:
        order_item.quantity += 1
        order_item.save()
        messages.success(request, "Item qty was updated.")
        return redirect("ItemAddedToCart")

我很可能误解了这里的模型,因为我不知道order_item等是什么


推荐阅读