【问题标题】:filter company based on category根据类别过滤公司
【发布时间】:2017-09-16 11:20:16
【问题描述】:

我在 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')

【问题讨论】:

    标签: python django django-models django-orm


    【解决方案1】:

    您可以应用过滤器:

    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) 如果需要为product_list 获取Company,请在Companycompany = models.ForeignKey('Company', related_name='products'company = models.ForeignKey('Company', related_name='products' 的字段FK 中按相关型号Product 的related_name 过滤

     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)
    

    【讨论】:

    • 所以我应该使用类似 ``` {{category.name}} ``` 这样的 url ?
    • 我收到以下错误无法将关键字“产品”解析为字段。
    • 对不起,我错过了产品中的 s。你能给我解释一下这个链接吗?
    • 我必须说这是现在清晰的解释。感谢您的帮助、努力和解释。谢谢
    • 很高兴为您提供帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-17
    • 1970-01-01
    • 2011-10-11
    • 1970-01-01
    • 2020-11-14
    相关资源
    最近更新 更多