【问题标题】:Complex Django query over foreign keys外键的复杂 Django 查询
【发布时间】:2011-01-02 23:04:12
【问题描述】:

我在同一个应用程序中有两个模型。该应用程序名为“News”,它的模型中有两个类,分别称为“Article”和“Category”。

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)

我想创建一个查询,显示所有已归档但按类别分组的文章。

我将如何有效地完成这项工作?

【问题讨论】:

  • 请不要告诉我这么简单:>>> c = Category.objects.filter(article__archived=True)
  • 看我的回答,这样我就能明白你的意思了。

标签: python django django-orm


【解决方案1】:
Article.objects.filter(archived=True).order_by('category')

我正在编辑此内容以获取更多信息以尝试提供帮助。

给定:

  • cat1
    • 艺术1
    • art2 存档
    • 艺术3
  • cat2
    • 艺术4
    • 艺术5
    • art6 存档
  • cat3
    • art7 存档
    • art8 存档
    • 艺术9

你希望你的查询集包含什么?

【讨论】:

  • 实际上 Category.objects.filter(article__archived=True) 有效。
  • @blackrobot:但你说你想要Articles。您的查询(假设它有效,我还没有测试过)将返回包含归档的ArticlesCategorys。 Brandon H 的查询将返回由Category 排序的Articles 列表。
  • 是的,我想要“按类别分组”。
【解决方案2】:

c = Category.objects.filter(article__archived=True)

【讨论】:

    【解决方案3】:

    这不是你想要的吗?

    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)
    

    【讨论】:

      猜你喜欢
      • 2011-10-20
      • 2011-06-08
      • 2012-10-25
      • 2011-02-01
      • 2018-09-01
      • 2013-06-09
      • 2011-10-13
      • 1970-01-01
      相关资源
      最近更新 更多