我想在模型中使用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'),