复杂的Django外键查询
我在同一个应用程序里有两个模型。这个应用叫做“新闻”,它的模型里有两个类,一个叫“文章”,另一个叫“分类”。
class Category(models.Model):
name = models.CharField(_("Name"), max_length=100)
slug = models.SlugField(_("Slug"), max_length=100, unique=True)
class Article(models.Model):
category = models.ForeignKey(Category, verbose_name=_("Category"))
archived = models.BooleanField(_("Archive this?"), default=False)
我想创建一个查询,显示所有已经归档的文章,并且按照分类进行分组。
我该如何高效地做到这一点呢?
3 个回答
2
这不是你想要的吗?
class Article(models.Model):
category = models.ForeignKey(Category, related_name='articles')
archived = models.BooleanField(default=False)
categories = Category.objects.select_related("articles").filter(articles__archived=True)
3
Article.objects.filter(archived=True).order_by('category')
我在编辑这个内容,以便获取更多信息来帮助解决问题。
给定的内容是:
- 类别1
- 文章1
- 文章2-已归档
- 文章3
- 类别2
- 文章4
- 文章5
- 文章6-已归档
- 类别3
- 文章7-已归档
- 文章8-已归档
- 文章9
你希望你的查询结果包含哪些内容呢?
3
c = Category.objects.filter(article__archived=True)
这段代码的意思是:我们在数据库中找出所有的分类(Category),这些分类下的文章(article)都是已经归档的(archived)。简单来说,就是筛选出那些有归档文章的分类。