Python 属性错误:';元组';对象没有属性';产品';

Python 属性错误:';元组';对象没有属性';产品';,python,django,django-rest-framework,Python,Django,Django Rest Framework,当我转到url:,它应该会将产品添加到购物车中。但它正在显示>AttributeError:“tuple”对象没有属性“product” 也许我弄错了 models.py: class Cart(models.Model): id = models.AutoField(primary_key=True) user = models.ForeignKey(User, on_delete=models.CASCADE, blank=True) session_key = mo

当我转到url:,它应该会将产品添加到购物车中。但它正在显示>AttributeError:“tuple”对象没有属性“product”

也许我弄错了

models.py:

class Cart(models.Model):
    id = models.AutoField(primary_key=True)
    user = models.ForeignKey(User, on_delete=models.CASCADE, blank=True)
    session_key = models.CharField(max_length=200, blank=True)
    product = models.ManyToManyField(Product, related_name='product_items')
views.py:

@api_view(['GET'])
def addToCart(request, pk):
    product = Product.objects.get(id=pk)
    if request.user.is_authenticated: #user is authenticated
        mycart = Cart.objects.get_or_create(user=request.user)
        mycart.product.add(product) # <--- here is the problem
    else:
        print(request.session.session_key)

    return Response({'response':'ok'})
@api_视图(['GET']))
def addToCart(请求,主键):
product=product.objects.get(id=pk)
如果request.user.u经过身份验证:#用户经过身份验证
mycart=Cart.objects.get\u或\u create(user=request.user)
mycart.product.add(product)#返回一个2元组,第一项是
Cart
对象,第二项是
bool
,用于确定是否创建了对象

因此,您应该通过以下方式来实现这一点:

from django.shortcuts import get_object_or_404

@api_view(['GET'])
def addToCart(request, pk):
    product = get_object_or_404(Product, pk=pk)
    if request.user.is_authenticated: #user is authenticated
        #     ↓ unpack the 2-tuple
        mycart, __ = Cart.objects.get_or_create(user=request.user)
        mycart.product.add(product)
    else:
        print(request.session.session_key)

    return Response({'response':'ok'})
从django.shortcuts导入get\u object\u或\u 404
@api_视图(['GET'])
def addToCart(请求,主键):
产品=获取对象或404(产品,主键=主键)
如果request.user.u经过身份验证:#用户经过身份验证
#&向下箭头;打开2元组
mycart,\uuuu=Cart.objects.get\u或\u create(user=request.user)
mycart.product.add(产品)
其他:
打印(请求.会话.会话\u键)
返回响应({'Response':'ok'})

注意:使用, 然后直接使用。如果对象不存在, 例如,由于用户自己更改了URL,
get\u object\u或_404(…)
将返回HTTP 404 Not Found响应,而使用
.get(…)
将导致HTTP 500服务器错误


注意: 指定GET和HEAD等请求不应有副作用,因此 不应通过此类请求更改实体。通常是POST、PUT、PATCH和 删除请求用于此操作。在这种情况下,您可以制作一个小的 将触发POST请求,或者使用一些AJAX调用