【问题标题】:Django filter on related field using annotateDjango使用注释过滤相关字段
【发布时间】:2013-07-23 10:21:46
【问题描述】:

我想使用注释进行过滤。

这是我的代码:

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" 类型的读者的所有博客。 我有这个代码来获取至少有 2 个读者的博客:

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

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

【问题讨论】:

    标签: python django django-models django-queryset


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2013-10-30
      • 1970-01-01
      • 2020-09-03
      • 2020-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-20
      • 1970-01-01
      相关资源
      最近更新 更多