【问题标题】:AttributeError( AttributeError: Generic detail view 'class' must be called with either an object pk or a slug in the URLconfAttributeError(AttributeError: Generic detail view 'class' 必须在 URLconf 中使用对象 pk 或 slug 调用
【发布时间】:2021-05-25 16:58:37
【问题描述】:

我真的需要一些帮助,拜托。

我认为我的代码是正确的,但是当我调用 python manage-py runserver 时出现错误。

• 模型.py

from django.db import models
from django.urls import reverse


class Product(models.Model):
    title = models.CharField(max_length=255)
    image = models.URLField(max_length=255)
    price = models.DecimalField(max_digits=12, decimal_places=2)
    product_id = models.SlugField(max_length=255, unique=True)

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse("api:detail", kwargs={"product_id": self.product_id})

views.py

from django.views.generic import ListView, DetailView

from .models import Product


class ProductListView(ListView):
    model = Product


class ProductDetailView(DetailView):
    model = Product

urls.py

from django.urls import path

from .views import ProductListView, ProductDetailView


app_name = "api"

urlpatterns = [
    path('', ProductListView.as_view(), name='list'),
    path('<slug:product_id>/', ProductDetailView.as_view(), name='detail'),
]

错误日志

在 get_object 中引发 AttributeError( AttributeError: Generic detail 查看 ProductDetailView 必须使用对象 pk 或 在 URLconf 中添加 slug。

【问题讨论】:

    标签: python django django-models django-urls


    【解决方案1】:

    由于您的模型具有不同名称的 slug 字段,您需要在视图中设置一些类属性,即 slug_url_kwargslug_field

    class ProductDetailView(DetailView):
        model = Product
        slug_url_kwarg = 'product_id'
        slug_field = 'product_id'
    

    DetailViewSingleObjectMixin 作为它的祖先之一,它处理获取对象并具有这些属性。

    【讨论】:

    • 效果很好...非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2021-10-28
    • 1970-01-01
    • 2021-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多