Django Количество обнаруженных запросов - PullRequest
0 голосов
/ 24 апреля 2020

У меня есть следующая django модель ...

class Entry(models.Model):
    entry_UUID = models.UUIDField()                                                                     
    entry_description = models.TextField()
    numeric_value = models.FloatField(null=True, blank=True) 
    entry_category = models.CharField()

Я пытаюсь выполнить запрос к базе данных - я ожидаю группы entry_UUID и для каждой группы некоторую статистику для numeric_value (Min / Max / Avg ) и считается для entry_category. Я не буду знать конкретные c значения для entry_category впереди, но я ожидаю, что они образуют набор (например, {low, med, high}).

Я пробовал следующий запрос:

Entry.objects.filter(
            entry_UUID__in = entry_UUIDs).values(
                'entry_UUID').annotate(
                    Avg('numeric_value'), 
                    Min('numeric_value'), 
                    Max('numeric_value'), 
                    Count('entry_category'))

Что возвращает ...

<QuerySet [{'entry_UUID': UUID('9fcfea6d-9480-595f-1e1f-81130ddc0c99'), 'numeric_value__avg':
51.5089, 'numeric_value__min': 23.174, 'numeric_value__max': 76.421, 'entry_category__count': 4}, {'entry_UUID': UUID('9fcfea6d-9490-595f-1e1f-81130ddc0c99'), 'numeric_value__avg': 5.2882, 'numeric_value__min': 1.282, 'numeric_value__max': 9.7553, 'entry_category__count': 6}]>

Для entry_category я рассчитываю получить количество вхождений для каждого значения, а не общее количество. Не знаю, как с этим справиться.

Спасибо.

1 Ответ

0 голосов
/ 24 апреля 2020

Я думаю, что вам нужно достичь с помощью этого

Entry.objects.filter(
            entry_UUID__in = entry_UUIDs).values(
                'entry_UUID', 'entry_category').annotate(
                    Avg('numeric_value'), 
                    Min('numeric_value'), 
                    Max('numeric_value'), 
                    Count('entry_category'))
...