【问题标题】:ForwardManyToOneDescriptor' object has no attribute 'slug Django using reverseForwardManyToOneDescriptor'对象没有属性'slug Django using reverse
【发布时间】:2021-02-13 19:02:42
【问题描述】:

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

【问题讨论】:

  • 把 __slug 改成 _slug
  • @iklinac:你能告诉我更具体的吗?

标签: python django django-models reverse slug


【解决方案1】:

改变你的路径。

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

【讨论】:

  • 感谢您的回复,但该类别位于主 URL 路径中。
  • 你知道,我认为问题在产品模型上是相反的。有些东西需要改变。我使用 slug 的方式是不对的。
猜你喜欢
  • 1970-01-01
  • 2021-03-11
  • 1970-01-01
  • 1970-01-01
  • 2017-06-03
  • 2020-02-11
  • 2015-02-19
  • 2016-03-30
  • 2021-04-05
相关资源
最近更新 更多