Django 外键的复杂查询

发布于 2024-08-16 21:42:50 字数 464 浏览 5 评论 0原文

我在同一个应用程序中有两个模型。该应用程序称为“新闻”,它的模型中有两个类,称为“文章”和“类别”。

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)

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

我如何有效地完成这个任务?

I have two models in the same application. The application is called "News", and it has two classes in its model called "Article" and "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)

I want to create a query that shows me all of the articles which are archived but grouped by category.

How would I accomplish this efficiently?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

帅冕 2024-08-23 21:42:50
Article.objects.filter(archived=True).order_by('category')

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

给定:

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

您希望查询集包含什么?

Article.objects.filter(archived=True).order_by('category')

i am editing this to get more info to try and help out.

given:

  • cat1
    • art1
    • art2-archived
    • art3
  • cat2
    • art4
    • art5
    • art6-archived
  • cat3
    • art7-archived
    • art8-archived
    • art9

what would you want your queryset to contain?

长安忆 2024-08-23 21:42:50

<块引用>
<块引用>

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


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

小帐篷 2024-08-23 21:42:50

这不是你想要的吗?

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)

Isn't this what you want?

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)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文