我正在尝试根据请求的网页链接显示链接到特定类别的查询集。我在学校里,尝试学习Django框架。
这是我尝试过的视图:
class ProductCategoryListView(ListView):
template_name = 'products/product_list.html'
def get_queryset(request, *args, **kwargs):
if Product.category == ProductCategory.title:
instance = ProductCategory.objects.get(title=instance)
post = Product.objects.filter(category=instance)
return post
这是我的模特:
class ProductCategory(models.Model):
title = models.CharField(max_length=200)
slug = models.SlugField()
parent = models.ForeignKey('self', blank=True, null=True,
related_name='children', on_delete=models.PROTECT)
class Product(models.Model):
title = models.CharField(max_length=100)
category = models.ForeignKey(ProductCategory, null=True, blank=True,
on_delete=models.CASCADE)
slug = models.SlugField(blank=True)
description = models.TextField()
price = models.DecimalField(decimal_places=2, max_digits=6)
image = models.ImageField(upload_to='products/', null=True, blank=True)
此视图加载了网页,但未呈现任何查询。
假设子弹属于某个类别,您可以这样做:
from django.shortcuts import get_object_or_404
class ProductCategoryListView(ListView):
template_name = 'products/product_list.html'
def get_queryset(request, *args, **kwargs):
category = get_object_or_404(Category, slug=self.slug)
products = Product.objects.filter(category=category)
return products
在您的Product
模型中,您可以在类别字段中设置related_name
,这样可以更轻松地从类别中访问产品:
class Product(models.Model):
title = models.CharField(max_length=100)
category = models.ForeignKey(
ProductCategory, null=True, blank=True, related_name="products", on_delete=models.CASCADE
)
...
现在您可以执行此操作:
from django.shortcuts import get_object_or_404
class ProductCategoryListView(ListView):
template_name = 'products/product_list.html'
def get_queryset(request, *args, **kwargs):
category = get_object_or_404(Category, slug=self.slug)
return category.products.all()