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 %}
我正在尝试实现一个搜索系统,它将按类别显示所有结果。
这些是我的模型。
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 %}