Python Django AttributeError:&x27;购物车&x27;对象没有属性';获取';

Python Django AttributeError:&x27;购物车&x27;对象没有属性';获取';,python,django,Python,Django,我在django项目中遇到以下错误: Request Method: GET Request URL: http://127.0.0.1:8000/cart/ Exception Type: AttributeError at /cart/ Exception Value: 'Cart' object has no attribute 'get' 下面是carts.views.py: from django.shortcuts import render, redire

我在django项目中遇到以下错误:

   Request Method: GET
   Request URL: http://127.0.0.1:8000/cart/
   Exception Type: AttributeError at /cart/
   Exception Value: 'Cart' object has no attribute 'get'
下面是carts.views.py:

from django.shortcuts import render, redirect, get_object_or_404
from store.models import Product
from .models import Cart, CartItem



# Create your views here.

def _cart_id(request):
    cart = request.session.session_key
    if not cart:
        cart = request.session.create()
    return cart

def add_cart(request, product_id):
    product = Product.objects.get(id=product_id)

    try:
        cart = Cart.objects.get(cart_id=_cart_id(request))
    except Cart.DoesNotExist:
        cart = Cart.objects.create(
            cart_id = _cart_id(request)
            )
        cart.save()
    
    try:
        cart_item = CartItem.objects.get(product=product, cart=cart)
        cart_item.quantity += 1
        cart_item.save()
    except CartItem.DoesNotExist:
        cart_item = CartItem.objects.create(
            product= product,
            quantity= 1,
            cart= cart,
        )
        cart_item.save()
    return redirect('cart')


def cart(request):
    return render(request, 'store/cart.html')
我试过:
  • 重写类“Cart”的名称
  • 使用objectDoesnotexist而不是DoesnotExit
  • 仔细检查models.py中类的名称
  • 我无法调试此错误。我忽略了我的代码很多次,但无法理解错误是在哪里产生的。提前谢谢

    编辑:

    models.py:

    from django.db import models
    from store.models import Product
    
    # Create your models here.
    
    class Cart(models.Model):
        cart_id         = models.CharField(max_length=250, blank=True)
        date_added      = models.DateTimeField(auto_now_add=True)
    
        def __str__(self):
            return self.cart_id
    
    class CartItem(models.Model):
        product         = models.ForeignKey(Product, on_delete=models.CASCADE)
        cart            = models.ForeignKey(Cart, on_delete=models.CASCADE, related_name='cart')
        quantity        = models.IntegerField()
        is_active       = models.BooleanField(default=True)
    
        def __str__(self):
            return self.product
    
    编辑: 完全回溯:

    Environment:
    
    
    Request Method: GET
    Request URL: http://127.0.0.1:8000/cart/
    
    Django Version: 3.2.3
    Python Version: 3.9.1
    Installed Applications:
    ['django.contrib.admin',
     'django.contrib.auth',
     'django.contrib.contenttypes',
     'django.contrib.sessions',
     'django.contrib.messages',
     'django.contrib.staticfiles',
     'category',
     'accounts',
     'store',
     'carts']
    Installed Middleware:
    ['django.middleware.security.SecurityMiddleware',
     'django.contrib.sessions.middleware.SessionMiddleware',
     'django.middleware.common.CommonMiddleware',
     'django.middleware.csrf.CsrfViewMiddleware',
     'django.contrib.auth.middleware.AuthenticationMiddleware',
     'django.contrib.messages.middleware.MessageMiddleware',
     'django.middleware.clickjacking.XFrameOptionsMiddleware']
    
    
    
    Traceback (most recent call last):
      File "D:\greatkart\env\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
        response = get_response(request)
      File "D:\greatkart\env\lib\site-packages\django\utils\deprecation.py", line 119, in __call__
        response = self.process_response(request, response)
      File "D:\greatkart\env\lib\site-packages\django\middleware\clickjacking.py", line 26, in process_response
        if response.get('X-Frame-Options') is not None:
    
    Exception Type: AttributeError at /cart/
    Exception Value: 'Cart' object has no attribute 'get'
    
    编辑: URL.py:

    from django.urls import path
    from . import views
    
    urlpatterns = [
        path('', views.Cart, name='cart'),
        path('add_cart/<int:product_id>/', views.add_cart, name='add_cart'),
    ]
    
    从django.url导入路径
    从…起导入视图
    URL模式=[
    路径(“”,views.Cart,name='Cart'),
    路径('add_cart/',views.add_cart,name='add_cart'),
    ]
    

    我开始使用而不是“Model.objects.get()” 因为这些错误

    你可以试试这个:

     cart = Cart.objects.filter(cart_id=_cart_id(request).first()
    
     if not cart:
         new_cart = Cart(cart_id = _cart_id(request))
         new_cart.save()
    
    此方法为您提供具有正确“购物车id”的所有对象。 使用“.first()”可以将给定的查询集转换为一个对象(即使查询集中只有一个对象,也需要这样做)

    而不是这个

        try:
            cart = Cart.objects.get(cart_id=_cart_id(request))
        except Cart.DoesNotExist:
            cart = Cart.objects.create(
                cart_id = _cart_id(request)
                )
            cart.save()
    

    感谢阿卜杜勒·阿齐兹·巴拉卡特:


    @asdfasdf在
    路径(“”,views.Cart,name='Cart')
    中,您的意思是编写
    视图.Cart
    而不是
    视图.Cart
    ?(注意大小写,
    Cart
    是您的型号名称,
    Cart
    是您视图的名称)——Abdul Aziz Barkat 6分钟前

    粘贴CART MODELAND请粘贴实际异常跟踪文件。您应该考虑使用<代码> GETIORORIGORION/COD>。这将使该视图的长度减少至少一半。此外,日志表明您正在发送GET请求,但我不确定是否理解,如果此视图首先要创建,请使用POST请求。请向我们显示完整的回溯错误。已添加models.py。