首页 > 解决方案 > Django通过对源进行分组来获取外键记录的计数

问题描述

我有两个模型,

媒体:

class Media(models.Model):
    persons = models.ManyToManyField(
        Person,
        blank=True,
        related_name="media",
        help_text="Persons identified in the media",
    )

    reviews = GenericRelation(Review, related_query_name="media")

    source = models.ForeignKey(
        Source,
        on_delete=models.SET_NULL,
        blank=True,
        null=True,
        related_name="media",
        help_text="Source for this media",
    )

审查:

class Review(models.Model):
    """Represents a review made by an Account on an object
    """
    content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
    object_id = models.PositiveIntegerField()
    review_item = GenericForeignKey('content_type', 'object_id')

    reviewer = models.ForeignKey(
        Account,
        blank=True,
        null=True,
        on_delete=models.SET_NULL,
        help_text="Account of the reviewer",
    )

我需要Media根据没有评论source的地方进行分组并计数。source换句话说,我需要计算每个source与存在没有关系的地方reviews

请指教。

标签: django

解决方案


此查询将为您提供所有Source带有计数注释的对象,这些对象Media没有相关Review

from django.db.models import Count

Source.objects.filter(
    media__reviews__isnull=True
).annotate(
    Count('media')
).values()

推荐阅读