Django多级反向查找

时间:2016-05-05 10:03:38

标签: django django-models django-queryset foreign-key-relationship

我有一个网站,其中的项目按类别和子类别进行分类。我的模型看起来像这样:

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 category.subcategory_set__item_set.all 中的项目或中的item.subcategory_set.all.item_set.all

中的项目

我知道我可以使用多个查询(事实上同时使用两个查询)来完成它,但我正在尝试使用单个查询来完成这项工作。它可以吗?

1 个答案:

答案 0 :(得分:0)

您只需获取子类别列表并使用regroup

即可
update Books_out_on_loan 
set amount_of_fine = amount_of_fine + 1.5
where date_returned is null

你能用一个查询做到吗?不是真的,因为你需要一个迭代所有子类别,然后另一个来分类,以产生列表的第一部分