ForwardManyToOneDescriptor' 对象没有属性 'slug Django 使用反向



我想在模型中使用reverse来支持一个URL,它有三个slug。但这给了我一个错误。

我的URL是这样的:site.com/category/slug/slug/slug…>

  • site.com/category/mobile/nokia/n95

错误:

"ForwardManyToOneDescriptor"对象没有属性"slug">

型号:

from Django.db import models
from Django.shortcuts import reverse

class Category(models.Model):
name = models.CharField(max_length=150)
slug = models.SlugField(unique=True, max_length=200)
child_category = models.ForeignKey('self', max_length=150, null=True, blank=True, on_delete=models.CASCADE)
is_child = models.BooleanField(default=False)
def __str__(self):
return self.name
def get_absolute_url(self):
return reverse('shop:brands', args=[self.slug])

class Product(models.Model):
category = models.ManyToManyField(to=Category, related_name='products')
name = models.CharField(max_length=150)
slug = models.SlugField(unique=True, max_length=200)
description = models.TextField()
class Meta:
ordering = ('name', 'available',)

def __str__(self):
return self.name
def get_absolute_url(self):
return reverse('shop:product_details', self.category.model.slug, self.category.model.child_category.slug, self.slug)

URL:

from Django.urls import path
from Shop import views
app_name = 'shop'
urlpatterns = [
path('<slug:brands_slug>/', views.brands, name='brands'),
path('<slug:brands_slug>/<slug:product_slug>/', views.products, name='products'),
path('<slug:brands_slug>/<slug:product_slug>/<slug:product_details>/', views.details_products, name='product_details'),
]

视图:

def details_products(request, brands_slug, product_slug, product_details):
details = Product.objects.filter(category__child_category__slug=brands_slug, category__slug=product_slug, slug=product_details)
context = {'details': details}
return render(request, 'shop/product_details.html', context=context)

更改路径。

path('category/<slug:brands_slug>/<slug:product_slug>/<slug:product_details>/', views.details_products, name='product_details'),

最新更新