python - 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'),
]
,,,
解决方案
您收到消息的原因:“产品匹配查询不存在。”
是因为代码:“product_obj = Product.objects.get(id=product_id)”
模型 Product 中没有 ID = 1 的行。您首先需要制作 2 个产品项目,然后才能检索 ID 为 1 的产品,顺便说一下,它不是通过 ID 检索对象的最佳方法,除非您知道什么产品的 ID 为 1。
推荐阅读
- node.js - 如何在 Knex.js 中动态创建 where 条件?
- javascript - Flexbox 从项目数组中扩展一个项目的全宽
- javascript - 在渲染之前使用 setState() 设置状态?
- git - Git 合并问题 - 避免冲突和混乱
- mysql - 如何生成一个视图,并从辅助视图中汇总总和?
- ios - 无法使用自己的 IndexPath 加载 UICollectionView,当在单元格中为项目打印时,IndexPath 也会随机添加:
- r - 从 Excel 读取时间显示问题 R
- kdb - 以下 numpy 代码的 KDB 等效项是什么
- python-3.x - ModuleNotFound 错误 - Windows 10 中 Anaconda Navigator 1.9.6 上的 tensorflow
- swift - 运行 HKStatisticsCollectionQuery 示例代码时出现“模糊使用‘组件’错误”