Django ORM 搜索产品但按类别分组

Django ORM search product but group by category

我正在尝试实现一个搜索系统,它将按类别显示所有结果。

这些是我的模型。

class Category(models.Model):

    name = models.CharField(max_length=255)
    slug = models.SlugField(
        verbose_name="slug",
        allow_unicode=True,
        max_length=255,
        help_text='A slug to identify posts by this category',
    )

  
class Product(models.Model):
   

    name = models.CharField(
        max_length=255,
        verbose_name=_('Product Name'),
    )
    categories = ManyToManyField("product.Category", related_name="product_category")

   

我需要在 frontend/template 中按类别呈现所有项目,但查询将基于产品名称。

prod_cat = Category.objects.annotate(
        filtered_product=Product.objects.filter(name__incontains="My Search Term goes There")
)

它根本不起作用。

我也可以这样查询:

result = []
prod_cat = Category.objects.all()
for cat in prod_cat:
    p = cat.product_category.filter(name__incontains='My Another Search Term')
    result.append(p)

但我觉得不是group by,而是基于每个list的list product,这样我就不能把模板上的category名称命名为category heading。

有没有人知道如何按类别查询和分组?

如果您按如下方式更改 result.append(p),您当前的解决方案将很容易工作:

result.append({'category': cat, 'products': p})

现在在模板中:

{% for entry in result %}
    {{ entry.category.name }}
    {% for product in entry.products %}
        {{ product.name }}
    {% endfor %}
{% endfor %}