过滤器公司基于类别

问题描述:

我正在做Django项目,以深入其中。模型部分有问题。有模型; CompanyProductCategoryCompany只是简介部分。 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的所属类别,按相关型号的相关名称过滤Companycompany = 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) 
+0

所以我应该使用像'''{{category.name}}'''然后是网址? – milan

+0

我收到以下错误无法将关键字'产品'解析为字段。 – milan

+0

对不起,我错过了产品中的s。你能解释我的链吗? – milan