根据类别过滤公司
filter company based on category
我在 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
是您当前的价值 select 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) 如果需要为 product_list 获取 Company
,请在 Company
上的字段 FK 中按相关模型 Product
的 related_name 过滤 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)
或最终按类别 slug 值
Company.objects.filter(products__categories__slug=category_slug)
我在 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
是您当前的价值 select 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) 如果需要为 product_list 获取 Company
,请在 Company
上的字段 FK 中按相关模型 Product
的 related_name 过滤 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)
或最终按类别 slug 值
Company.objects.filter(products__categories__slug=category_slug)