【问题标题】:Combine two Django queries结合两个 Django 查询
【发布时间】:2018-01-15 12:57:19
【问题描述】:

我有两个相关的模型:

class Category(models.Model):
    pass


class Entry(models.Model):
    category = models.ForeignKey(Category, related_name='entries')
    is_published = models.BooleanField(default=True)

我需要获取已发布条目的类别。

我最终得到了两个查询:

published = Entry.objects.filter(is_published=True)
categories = Category.objects.filter(entries__in=published)

我可以在一个查询中执行此操作吗?

【问题讨论】:

    标签: django django-orm


    【解决方案1】:

    使用双下划线跨相关对象进行查询。

    categories = Category.objects.filter(entry__is_published=True)
    

    (请注意,您的原始代码实际上只会执行一个查询,但它会有一个子查询,这可能比我的版本中的 JOIN 效率低。)

    【讨论】:

    • vlad因为你的字段名是entry而不是entry,你要明白代码不要复制粘贴!
    • @Daniel 您的查询中有错字,但这个想法是正确的,谢谢。
    猜你喜欢
    • 2014-02-23
    • 2015-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多