python - 如何在 django 中按品牌或类别过滤产品
问题描述
我正在开发一个 Django 博客,我希望能够按类别或品牌过滤产品。
**Page not found (404)**
**Request Method: GET**
**Request URL: http://127.0.0.1:8000/nestle/**
**Raised by: shop.views.product_list**
**No Category matches the given query.**
该代码适用于单个实例,但当我尝试同时使用两个实例时失败。即,如果我应该评论品牌或类别,代码运行良好,但两者不能一起工作。
**请求 URL: http: //127.0.0.1 : 8000/nestle/ ** -- 雀巢是一个品牌,但引发的错误是No Category 与给定查询匹配。. 我希望它按品牌而不是按类别过滤
这是我的views.py 文件
def product_list(request, category_slug=None, brand_slug=None):
category = None
categories = Category.objects.all()
products = Product.objects.filter(available=True)
brand = None
brands = Brand.objects.all()
products = Product.objects.filter(available=True)
if category_slug:
category = get_object_or_404(Category, slug=category_slug)
products = products.filter(category=category)
elif brand_slug:
brand = get_object_or_404(Brand, slug=brand_slug)
products = products.filter(brand=brand)
return render(request,
'shop/product/list.html',
{'category': category,
'categories': categories,
'brand': brand,
'brands': brands,
'products': products})
这是我的模型.py
from django.urls import reverse
class Category(models.Model):
name = models.CharField(max_length=200,db_index=True)
slug = models.SlugField(max_length=200,unique=True)
class Meta:
ordering = ('name',)
verbose_name = 'category'
verbose_name_plural = 'categories'
def __str__(self):
return self.name
def get_absolute_url(self):
return reverse('shop:product_list_by_category',args=[self.slug])
class Brand(models.Model):
name = models.CharField(max_length=200,db_index=True)
slug = models.SlugField(max_length=200,unique=True)
class Meta:
ordering = ('name',)
verbose_name = 'brand'
verbose_name_plural = 'brands'
def __str__(self):
return self.name
def get_absolute_url(self):
return reverse('shop:product_list_by_brand',args=[self.slug])
class Product(models.Model):
category = models.ForeignKey(Category,related_name='products',on_delete=models.CASCADE)
brand = models.ForeignKey(Brand,related_name='products',on_delete=models.CASCADE)
name = models.CharField(max_length=200, db_index=True)
slug = models.SlugField(max_length=200, db_index=True)
image = models.ImageField(upload_to='products/%Y/%m/%d',blank=True)
description = models.TextField(blank=True)
price = models.DecimalField(max_digits=10, decimal_places=2)
available = models.BooleanField(default=True)
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
class Meta:
ordering = ('name',)
index_together = (('id', 'slug'),)
def __str__(self):
return self.name
def get_absolute_url(self):
return reverse('shop:product_detail',args=[self.id, self.slug])
有人能帮我吗?抱歉,我是新手,正在尝试通过教程学习。谢谢
解决方案
推荐阅读
- ios - 使用 XCTestCases 类中的可访问性标识符访问 NavigationLink - SwiftUI
- gnome - 通过 GUI 设置 GNOME 显示比例究竟修改了什么?
- multipart - 如何通过发布请求和正文参数放心地使用多部分
- networking - 受密码保护的共享
- flutter - 无法在初始化程序中访问实例成员,尝试用不同的表达式替换对实例成员的引用 -alternative?
- mongodb - 连接到 MongoDB Atlas
- python - 如何在烧瓶应用程序中设置 api 前缀?
- apache - 访问网站 localhost/website/ 时出现错误“在此服务器上找不到请求的 URL”
- tcp - 模拟 TCP 连接错误以进行健康检查
- python - 如何从相应索引列表中更改 NumPy 结构化数组中特定数据类型记录的数据类型?(Python)