【发布时间】:2016-08-31 01:42:34
【问题描述】:
我有一个网站,其中的项目按类别和子类别进行分类。我的模型如下所示:
from django.db import models
class Category(models.Model):
name = models.CharField(max_lenght=100)
class Subcategory(models.Model):
name = models.CharField(max_lenght=100)
category = models.ForeignKey('Category')
class Item(models.Model):
name = models.CharField(max_lenght=100)
subcategory = models.ForeignKey('Subcategory')
我需要在同一页面中显示一个类别的所有项目及其所有子类别(这是项目的必要条件),并且列表应该按顺序排列,如下所示:
类别:
- 项目 1
- 第 2 项
- 项目 3
- 第 4 项
- 第 5 项
- 第 6 项
子类别 1
- 项目 1
- 项目 3
- 第 4 项
子类别 2
- 第 2 项
- 第 5 项
- 第 6 项
到目前为止,我有两个可能的查询,但我无法完成。
items = Item.objects.prefetch_related('subcategory', 'subcategory__category').filter(subcategory__category__slug=categorySlug)
这个查询给了我一个 QuerySet,我可以在我的模板中做一个 for 循环来显示所有项目,但我不能按子类别对它们进行排序。
{% for item in items %}
我需要的是类似于 items.subcategory 中的子类别的东西。
下一个查询是相反的:
category = Category.objects.prefetch_related('subcategoria_set', 'subcategoria_set__item_set').get(slug=categorySlug)
通过这个查询,我可以循环显示子类别的项目
{% for subcategory in category.subcategory_set.all %}
{% for item in subcategory.item_set.all %}
我不能按类别按顺序显示所有项目。我需要 for item in category.subcategory_set__item_set.all 或 for item in category.subcategory_set.all.item_set.all
我知道我可以使用多个查询来完成这项工作(实际上是同时使用两个查询),但我正在尝试使用一个查询来完成这项工作。有可能吗?
【问题讨论】:
标签: django django-models django-queryset foreign-key-relationship