过滤外键对象中的字段

时间:2014-05-22 14:25:24

标签: python django django-queryset

我有以下型号:

class Project(models.Model):
    name = models.CharField(max_length=100)
    isprivate = models.BooleanField(default=False)

class View(models.Model):
    name = models.CharField(max_length=100)
    isprivate = models.BooleanField(default=False)
    project = models.ForeignKey('Project', related_name='views')

我想得到一个QuerySet,其中包含非私有的所有项目,并且至少有一个非私有的View。例如,类似于:

Project.objects.filter(isprivate=False, views__isprivate=False)

有什么建议吗?

感谢。

1 个答案:

答案 0 :(得分:3)

试试这个:

Project.objects.filter(isprivate=False)
               .annotate(private_views=Count('views__isprivate'))
               .filter(private_views__gte=1)

documentation on aggregation了解Count()的更多信息。