python - ForwardManyToOneDescriptor'对象没有属性'slug Django using reverse
问题描述
我想在模型中使用 reverse 来支持一个包含三个 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)
网址:
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'),
推荐阅读
- moodle - Moodle 测验标记指南
- vue.js - 意外的结束标签 - Vetur 扩展
- python - 根据旧数据帧的计数 column1 创建新数据帧(column1 x column1)?
- javascript - Antd Modal如何更新其中的值
- java - Spring Boot GET 和 POST 返回 Not Found (CrudReposirory)
- spring - 尝试使用 spring-jms 和 IBM MQ 时出错
- c - 处理stdin流和EOF时如何使用fgets和feof?
- python - 如何从 Lambda 函数调用 AWS EFS 上的 python 脚本?
- wordpress - 如何在 WAMP 服务器上运行的 Wordpress 中加载自定义模板文件?
- memory-leaks - 金丝雀泄漏 (scanf("%d", num)