【问题标题】:Django: "Product matching query does not exist."?Django:“产品匹配查询不存在。”?
【发布时间】:2021-09-18 17:54:27
【问题描述】:

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

在此先感谢 SO 社区

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) …

views.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')

models.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)

urls.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'),
]
,,,

【问题讨论】:

  • 没有product_id=1的产品。
  • 对不起,我上传了错误的models.py文件
  • 但是模型在这里无关紧要:你在上一行使用了`product_obj = Product.objects.get(id=product_id)`和product_id=1,所以你用主键获取Product等于一,但不存在这样的Product 记录。
  • 谢谢!!我花了一段时间才弄清楚事情,阅读了很多文档。在接下来的几天里寻找那杯咖啡!

标签: python python-3.x django


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-05
    • 2015-01-28
    • 2022-01-05
    • 2020-10-15
    • 2016-05-11
    相关资源
    最近更新 更多