结合两个Django查询

时间:2018-01-15 12:57:20

标签: django django-orm

我有两个相关的模型:

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)

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

1 个答案:

答案 0 :(得分:3)

使用双下划线在相关对象之间进行查询。

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

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