Django使用注释过滤相关字段

时间:2013-07-23 10:21:47

标签: python django django-models django-queryset

我想使用注释进行过滤。

这是我的代码:

class Blog(models.Model):
    name = models.CharField(max_length=100)

class Reader(models.Model):
    name = models.CharField(max_length=50)
    blog= models.ForeignKey(Blog)
    type = models.ForeignKey(ReaderType)

class ReaderType(models.Model):
    name = models.CharField(max_length=50)

我希望得到至少有2个类型为"male"的Reader的所有博客。 我有这个代码来获得至少有2个读者的博客:

Blog.objects.annotate(reader_count=Count(reader)).filter(reader_count__gte=2)

如何添加仅过滤至少有2位读者的博客type="male"

的部分

1 个答案:

答案 0 :(得分:2)

您可以直接在查询中过滤阅读器类型:

posts_with_multiple_readers = (
    Blog.objects.filter(reader__type__name='male')
    .annotate(reader_count=Count('reader'))
    .filter(reader_count__gte=2)
)