首页 > 解决方案 > Django:“产品匹配查询不存在。”?

问题描述

在创建 cart_update 函数时,我是按照 Udemy Python/Django 电子商务教程进行编程的新手。我在下面遇到了这个错误。我在模型中使用 ForeignKey 作为用户。有人可以解释我做错了什么吗?我应该如何考虑这种错误?

在此先感谢社区

DoesNotExist at /cart/update/
Product matching query does not exist.

/Users/duce/Sites/RENUecommerce/src/carts/views.py, line 20, in cart_update
    product_obj = Product.objects.get(id=product_id) …

视图.py

from django.shortcuts import render, redirect, get_object_or_404
from django.contrib.auth.models import User
from inventory.models import Product
from .models import Cart


def cart_update(request):
    product_id = 1
    product_obj = Product.objects.get(id=product_id)
    #product_obj = get_object_or_404(Product, id=product_id)
    
    cart_obj, new_obj = Cart.objects.new_or_get(request)
    cart_obj.products.add(product_obj)
    return redirect('cart:update')

模型.py

import random, os
from django.db import models
from django.db.models import Q
from django.db.backends.base import features
from django.db.models.fields import SlugField
from django.contrib.auth.models import User
from django.db.models.signals import pre_save, post_save
from django.urls import reverse
from .utls import unique_slug_generator

class ProductManager(models.Manager):
    def featured(self):
        return self.get_queryset().filter(featured=True)

        
    def get_by_id(self, id):
        qs = self.get_queryset().filter(id=id) # Product.objects == self.get.queryset()
        if qs.count() == 1:
            return qs.first()
        return None

    def search(self, query):
        lookups = Q(title__icontains=query) | Q(description__icontains=query) |Q(price__icontains=query) |Q(tag__title__icontains=query)
        return self.get_queryset().filter(lookups).distinct()


class Product(models.Model):
    title       =models.CharField(max_length=120)
    slug        =models.SlugField(blank=True, unique=True)
    description =models.TextField()
    price       =models.DecimalField(decimal_places=2, max_digits=6, default=0.00)
    image       =models.ImageField(upload_to=upload_image_path, null=True, blank=True)
    featured    =models.BooleanField(default=False)

    obj = ProductManager()
    objects = models.Manager()

    def __str__(self):
        return self.title

    def get_absolute_url(self):
       return "/inventory/{slug}/".format(slug=self.slug)

网址.py

from django.urls import path, re_path

from .views import(
     cart_home, 
     cart_update,
)

app_name = 'cart'

urlpatterns = [
    path('', cart_home, name='home'),
    path('update/', cart_update, name='update'),
]
,,,

标签: pythonpython-3.xdjango

解决方案


您收到消息的原因:“产品匹配查询不存在。”

是因为代码:“product_obj = Product.objects.get(id=product_id)”

模型 Product 中没有 ID = 1 的行。您首先需要制作 2 个产品项目,然后才能检索 ID 为 1 的产品,顺便说一下,它不是通过 ID 检索对象的最佳方法,除非您知道什么产品的 ID 为 1。


推荐阅读