复杂的Django外键查询

2 投票
3 回答
1430 浏览
提问于 2025-04-15 17:48

我在同一个应用程序里有两个模型。这个应用叫做“新闻”,它的模型里有两个类,一个叫“文章”,另一个叫“分类”。

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)。简单来说,就是筛选出那些有归档文章的分类。

撰写回答