首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Django AttributeError:'Cart‘对象没有属性'get’

Django AttributeError:'Cart‘对象没有属性'get’
EN

Stack Overflow用户
提问于 2021-05-22 13:42:22
回答 2查看 1.3K关注 0票数 0

我在django项目上得到了这个错误:

代码语言:javascript
运行
复制
   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:

代码语言:javascript
运行
复制
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')

我试过:

  1. 重写类“购物车”的名称
  2. 使用objectDoesnotexist而不是DoesnotExit
  3. 重复检查models.py中类的名称

我无法调试此错误。我忽略了我的代码很多次,但无法理解哪里产生的错误。提前谢谢。

编辑:

models.py:

代码语言:javascript
运行
复制
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

编辑:完整的跟踪:

代码语言:javascript
运行
复制
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'

编辑: urls.py:

代码语言:javascript
运行
复制
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'),
]
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-05-22 14:52:47

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

@asdfasdf在path('', views.Cart, name='cart')中,你是想写views.cart而不是views.Cart吗?(注意大写,Cart是您的模型名称,cart是您视图的名称).-6分钟前的阿卜杜勒·阿齐兹·巴卡特

票数 0
EN

Stack Overflow用户

发布于 2021-05-22 14:33:56

由于这些错误,我开始使用"Model.objects.filter().first()“而不是"Model.objects.get()“。

你可以试试这个:

代码语言:javascript
运行
复制
 cart = Cart.objects.filter(cart_id=_cart_id(request).first()

 if not cart:
     new_cart = Cart(cart_id = _cart_id(request))
     new_cart.save()

此方法为所有对象提供了正确的"cart_id“。使用".first()“,您将把给定的查询集转换为一个对象(即使在查询集中只有一个对象,也需要这样做)

而不是这个

代码语言:javascript
运行
复制
    try:
        cart = Cart.objects.get(cart_id=_cart_id(request))
    except Cart.DoesNotExist:
        cart = Cart.objects.create(
            cart_id = _cart_id(request)
            )
        cart.save()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67650167

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档