Django, аннотировать с предварительной выборкой - PullRequest
0 голосов
/ 14 июля 2020

У меня есть Django API фермы.

class Group(models.Model):
    name = models.CharField()
    milking = models.BooleanField()
    sub_groups = models.ForeignKey('self',
                                   on_delete=models.DO_NOTHING)
    herd = models.ForeignKey(on_delete=models.CASCADE,
                             to=Herd)

    def __str__(self):
        return self.name


class Cow(models.Model):
    management_id = models.CharField()
    eid_number = models.CharField(primary_key=True,
                                  blank=False)
    group = models.ForeignKey(Group,
                              on_delete=models.PROTECT)
    days_in_pasture = models.IntegerField()
    hours_in_pasture = models.IntegerField()

    def __str__(self):
        return self.eid_number

Я хочу, чтобы набор запросов в представлении возвращал данные всех групп и каждой группы коров и аннотировал количество дней на пастбище для для каждой группы (укажите сумму дней, проведенных группой коров на пастбище).

Пока что у меня что-то вроде этого:

class GroupView(ModelViewSet):
    filter_backends = GROUP_FILTERS

    def get_queryset(self):
        query_set = Group.objects.all().prefetch_related('cow').annotate(amount_of_cows=Count('cow__days_in_pasture'))
        return query_set
...