Я использую django 3 и только что добавил код для подкатегорий в моей модели и представлении, но я получаю эту ошибку. Я думаю, что мне не хватает изменения структуры кода, потому что учебник был для django 1.x, но я не смог его найти.
models.py:
class Category(models.Model):
name = models.CharField(max_length=200)
slug = models.SlugField()
parent = models.ForeignKey(
'self', blank=True, null=True, related_name='children', on_delete=models.CASCADE)
class Meta:
unique_together = ('slug', 'parent',)
verbose_name_plural = "categories"
def __str__(self):
full_path = [self.name]
k = self.parent
while k is not None:
full_path.append(k.name)
k = k.parent
return ' -> '.join(full_path[::-1])
class Product(models.Model):
title = models.CharField(max_length=200)
description = models.TextField(verbose_name='desription')
slug = models.SlugField()
image = models.ImageField(upload_to='product_pics', default='default.jpg')
category = models.ForeignKey(
'Category', null=True, blank=True, on_delete=models.CASCADE)
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse('product-detail', kwargs={'slug': self.slug})
def get_cat_list(self):
k = self.category
breadcrumb = ["dummy"]
while k is not None:
breadcrumb.append(k.slug)
k = k.parent
for i in range(len(breadcrumb)-1):
breadcrumb[i] = '/'.join(breadcrumb[-1:i-1:-1])
return breadcrumb[-1:0:-1]
view .py:
def show_category(request, hierarchy=None):
category_slug = hierarchy.split('/')
category_queryset = list(Category.objects.all())
all_slugs = [x.slug for x in category_queryset]
parent = None
for slug in category_slug:
if slug in all_slugs:
parent = get_object_or_404(Category, slug=slug, parent=parent)
else:
instance = get_object_or_404(Product, slug=slug)
breadcrumbs_link = instance.get_cat_list()
category_name = [' '.join(i.split('/')[-1].split('-'))
for i in breadcrumbs_link]
breadcrumbs = zip(breadcrumbs_link, category_name)
return render(request, "product_detail.html", {'instance': instance, 'breadcrumbs': breadcrumbs})
return render(request, "product_list.html", {'product_set': parent.product_set.all(), 'sub_categories': parent.children.all()})
urls.py:
urlpatterns = [
path('', ProductsListView.as_view(), name='product-list'),
path('category/<path:hierarchy>/', show_category, name='category'),
]
мой основной файл URL включил этот файл, и в нем есть '/ products /'.