MultipleObjectsReturned at /sport/1/ get() 返回了多个产品——它返回了 3
MultipleObjectsReturned at /sport/1/ get() returned more than one Product -- it returned 3
我正在按类别对产品进行分类。当我查看产品的详细信息时,程序输出以下错误:
多个对象在 /default/1/ 返回
get() 返回了不止一个产品 -- 它返回了 2!
Users/artemiikhristich/PycharmProjects/Eshop-original/store/views.py,第 114 行,在 product_detail 中
product = get_object_or_404(Product, slug=slug)
product.html
此模板用于查看产品详情
% extends "store/main.html" %}
{% block content %}
{% load static %}
<link rel="stylesheet" type="text/css" href="{% static 'css/style.css' %}">
<!DOCTYPE html>
<html lang="">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Tutorial</title>
<!-- Fonts -->
<link href="https://fonts.googleapis.com/css?family=Roboto:300,400,500" rel="stylesheet">
<!-- CSS -->
<link href="static/css/style.css" rel="stylesheet">
<meta name="robots" content="noindex,follow" />
</head>
<body>
<main class="container">
<!-- Left Column / Headphones Image -->
<!-- Right Column -->
<div class="right-column">
<!-- Product Description -->
<div class="product-description">
<span></span>
<h1>{{product.name}}</h1>
<div class="left-column">
<img data-image="black" src="{{ product.imageURL }}">
</div>
<p>"{{product.description}}"</p>
</div>
<!-- Product Configuration -->
</div>
<!-- Product Pricing -->
<div class="product-price">
<button data-product="{{product.id}}" data-action="add" class="btn btn-outline-secondary add-btn update-cart">Add to Cart</button>
<div class="product-configuration">
<a href="#">How to take the measurements</a>
</div>
</div>
</div>
</main>
<!-- Scripts -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js" charset="utf-8"></script>
<script src="static/js/script.js" charset="utf-8"></script>
</body>
</html>
{% endblock %}
views.py
这里我有 product_detail 和 category_detail
的观点
class ProductList(ListView):
model = Product
def product_detail(request, category_slug, slug):
product = get_object_or_404(Product, slug=slug)
context = {
'product': product
}
return render(request, 'store/product.html', context)
def category_detail(request, slug):
category = get_object_or_404(Category, slug=slug)
products = category.products.all()
context = {
'category': category,
'products': products
}
return render(request, 'store/category_detail.html', context)
enter code here
urls.py
from django.urls import path
from . import views
from .views import product_detail, category_detail
urlpatterns = [
# Leave as empty string for base url
path('', views.store, name="store"),
path('cart/', views.cart, name="cart"),
path('checkout/', views.checkout, name="checkout"),
path('update_item/', views.updateItem, name="update_item"),
path('process_order/', views.processOrder, name="process_order"),
path('<slug:category_slug>/<slug:slug>/', product_detail, name='product-detail'),
path('<slug:slug>/', category_detail, name='category_detail')
]
models.py
这里我用外键链接类别和产品
class Category(models.Model):
title = models.CharField(max_length=255)
slug = models.SlugField(max_length=255, default=1)
class Meta:
verbose_name_plural = 'Categories'
def __str__(self):
return self.title
class Product(models.Model):
category = models.ForeignKey(Category, related_name='products', on_delete=models.CASCADE, default=1)
name = models.CharField(max_length=200)
price = models.FloatField()
digital = models.BooleanField(default=False, null=True, blank=True)
image = models.ImageField(null=True, blank=True)
description = models.TextField(null=True, blank=True)
slug = models.SlugField(max_length=255, default=1)
def __str__(self):
return self.name
@property
def imageURL(self):
try:
url = self.image.url
except:
url = ''
return url
你的挑战来自于你使用 get_object_or_404 最好为你的详细视图做这样的事情:
def product_detail(request, category_slug, slug):
product = Product.objects.get(slug=slug)
context = {
'product': product
}
return render(request, 'store/product.html', context)
问题出在 slug 字段上。以前,在 models.py 我有:
slug = models.SlugField(max_length=255, default=1)
我有产品和类别模型的 slug 字段。 Slug 就像产品的唯一 ID。之前我说过每次创建产品时,default=1
。然而,这并不像您想象的那样独一无二。我的解决方案:
slug = models.SlugField(max_length=255, unique=True, default=uuid.uuid1)
我正在使用 unique=True
和 Universal Unique Identifier library
希望对您有所帮助。欢迎留下任何评论
我正在按类别对产品进行分类。当我查看产品的详细信息时,程序输出以下错误:
多个对象在 /default/1/ 返回 get() 返回了不止一个产品 -- 它返回了 2! Users/artemiikhristich/PycharmProjects/Eshop-original/store/views.py,第 114 行,在 product_detail 中 product = get_object_or_404(Product, slug=slug)
product.html
此模板用于查看产品详情
% extends "store/main.html" %}
{% block content %}
{% load static %}
<link rel="stylesheet" type="text/css" href="{% static 'css/style.css' %}">
<!DOCTYPE html>
<html lang="">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Tutorial</title>
<!-- Fonts -->
<link href="https://fonts.googleapis.com/css?family=Roboto:300,400,500" rel="stylesheet">
<!-- CSS -->
<link href="static/css/style.css" rel="stylesheet">
<meta name="robots" content="noindex,follow" />
</head>
<body>
<main class="container">
<!-- Left Column / Headphones Image -->
<!-- Right Column -->
<div class="right-column">
<!-- Product Description -->
<div class="product-description">
<span></span>
<h1>{{product.name}}</h1>
<div class="left-column">
<img data-image="black" src="{{ product.imageURL }}">
</div>
<p>"{{product.description}}"</p>
</div>
<!-- Product Configuration -->
</div>
<!-- Product Pricing -->
<div class="product-price">
<button data-product="{{product.id}}" data-action="add" class="btn btn-outline-secondary add-btn update-cart">Add to Cart</button>
<div class="product-configuration">
<a href="#">How to take the measurements</a>
</div>
</div>
</div>
</main>
<!-- Scripts -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js" charset="utf-8"></script>
<script src="static/js/script.js" charset="utf-8"></script>
</body>
</html>
{% endblock %}
views.py
这里我有 product_detail 和 category_detail
的观点class ProductList(ListView):
model = Product
def product_detail(request, category_slug, slug):
product = get_object_or_404(Product, slug=slug)
context = {
'product': product
}
return render(request, 'store/product.html', context)
def category_detail(request, slug):
category = get_object_or_404(Category, slug=slug)
products = category.products.all()
context = {
'category': category,
'products': products
}
return render(request, 'store/category_detail.html', context)
enter code here
urls.py
from django.urls import path
from . import views
from .views import product_detail, category_detail
urlpatterns = [
# Leave as empty string for base url
path('', views.store, name="store"),
path('cart/', views.cart, name="cart"),
path('checkout/', views.checkout, name="checkout"),
path('update_item/', views.updateItem, name="update_item"),
path('process_order/', views.processOrder, name="process_order"),
path('<slug:category_slug>/<slug:slug>/', product_detail, name='product-detail'),
path('<slug:slug>/', category_detail, name='category_detail')
]
models.py
这里我用外键链接类别和产品
class Category(models.Model):
title = models.CharField(max_length=255)
slug = models.SlugField(max_length=255, default=1)
class Meta:
verbose_name_plural = 'Categories'
def __str__(self):
return self.title
class Product(models.Model):
category = models.ForeignKey(Category, related_name='products', on_delete=models.CASCADE, default=1)
name = models.CharField(max_length=200)
price = models.FloatField()
digital = models.BooleanField(default=False, null=True, blank=True)
image = models.ImageField(null=True, blank=True)
description = models.TextField(null=True, blank=True)
slug = models.SlugField(max_length=255, default=1)
def __str__(self):
return self.name
@property
def imageURL(self):
try:
url = self.image.url
except:
url = ''
return url
你的挑战来自于你使用 get_object_or_404 最好为你的详细视图做这样的事情:
def product_detail(request, category_slug, slug):
product = Product.objects.get(slug=slug)
context = {
'product': product
}
return render(request, 'store/product.html', context)
问题出在 slug 字段上。以前,在 models.py 我有:
slug = models.SlugField(max_length=255, default=1)
我有产品和类别模型的 slug 字段。 Slug 就像产品的唯一 ID。之前我说过每次创建产品时,default=1
。然而,这并不像您想象的那样独一无二。我的解决方案:
slug = models.SlugField(max_length=255, unique=True, default=uuid.uuid1)
我正在使用 unique=True
和 Universal Unique Identifier library
希望对您有所帮助。欢迎留下任何评论