首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MultipleObjectsReturned at /sport/1/ get()返回多个产品--它返回了3

MultipleObjectsReturned at /sport/1/ get()返回多个产品--它返回了3
EN

Stack Overflow用户
提问于 2022-03-10 16:37:29
回答 2查看 370关注 0票数 0

我正在按类别对产品进行分类。当我查看产品的详细信息时,程序输出以下错误:

MultipleObjectsReturned at //1/ get()返回多个产品--返回2! 第114行,在product_detail Product =get_object_or_404(Productslug=slug)中

product.html

此模板用于查看产品详细信息。

代码语言:javascript
复制
% 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的视图

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

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

在这里,我用外键连接类别和产品。

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

参考文献

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-03-11 22:12:53

问题是鼻涕虫领域。以前,在models.py中,我有:

代码语言:javascript
复制
slug = models.SlugField(max_length=255, default=1)

我有产品和类别模型的弹格字段。鼻涕虫就像产品的唯一ID。之前我曾说过,每次产品创建时,都是default=1。然而,这并不是你所能想象的独一无二的。我的解决方案:

代码语言:javascript
复制
slug = models.SlugField(max_length=255, unique=True, default=uuid.uuid1)

我使用的是unique=True通用唯一标识符库

我希望这能帮到你。请随时留下评论。

票数 0
EN

Stack Overflow用户

发布于 2022-03-10 21:44:22

好吧,您的挑战来自您使用get_object_or_404,最好这样做,您的详细视图如下:

代码语言:javascript
复制
def product_detail(request, category_slug, slug):
    product = Product.objects.get(slug=slug)

    context = {
        'product': product
    }
    return render(request, 'store/product.html', context)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71427693

复制
相关文章

相似问题

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