过滤器公司基于类别
问题描述:
我正在做Django项目,以深入其中。模型部分有问题。有模型; Company
,Product
,Category
。 Company
只是简介部分。 Product
是关于一个公司的产品,它的分类是ManyToManyField
。过滤器公司基于类别
我列出了页面中的所有类别,如果某个类别被点击,那么具有该类别产品的公司列表应该被过滤。但我不知道如何访问它。
这里是我的模型
class Category(models.Model):
name = models.CharField(max_length=50)
slug = models.SlugField(max_length=50, unique=True)
class Product(models.Model):
name = models.CharField(max_length=200, unique=True, blank=False, null=False)
company = models.ForeignKey('Company', related_name='products', blank=True, null=True, on_delete=models.SET_NULL)
website = models.URLField(unique=True)
slug = models.SlugField(unique=True)
categories = models.ManyToManyField(Category, related_name='products')
class Company(models.Model):
name = models.CharField(max_length=200, unique=True, blank=False, null=False)
slug = models.SlugField(unique=True)
description = models.CharField(max_length=400)
editor = models.ForeignKey(User, related_name='company')
# product = models.ForeignKey(Product, related_name='company')
答
您可以应用过滤器:
Company.objects.filter(products__categories__slug=category_slug)
其中category_slug
它是您当前的价值选择Category.slug
细节:
1 )如果我们需要得到Category
cat = Category.objects.get(slug=category_slug)
2)如果我们需要得到所有Product
这一类
product_list = Product.objects.filter(categories=cat)
或加双下划线many2many模型字段名
product_list = Product.objects.filter(categories__slug=cat)
# ^^^^
3)如果需要获得Company
的所属类别,按相关型号的相关名称过滤Company
company = models.ForeignKey('Company', related_name='products'
Company.objects.filter(products__in=product_list)
# ^^^^^^^
或类别,例如
cat = Category.objects.get(slug=category_slug)
Company.objects.filter(products__categories=cat)
或finaly按类别蛞蝓值
Company.objects.filter(products__categories__slug=category_slug)
所以我应该使用像'''{{category.name}}'''然后是网址? – milan
我收到以下错误无法将关键字'产品'解析为字段。 – milan
对不起,我错过了产品中的s。你能解释我的链吗? – milan