diff --git a/back/tgbot/serializers.py b/back/tgbot/serializers.py index 6fbf2a7..f826da8 100644 --- a/back/tgbot/serializers.py +++ b/back/tgbot/serializers.py @@ -1,13 +1,26 @@ from rest_framework import serializers -from tmc.models import Territory +from django.db.models import Count + +from tmc.models import Territory, CustomTable from tmc.serializers import TerritorySerializer -from .models import TgItem, TmcField +from .models import TgItem, TmcElement, TmcField import logging logger = logging.getLogger("root") +class CustomTableSerializer(serializers.ModelSerializer): + class Meta: + model = CustomTable + fields = ["name"] + + +class TmcElementSerializer(serializers.Serializer): + tmc__name = serializers.CharField() + count = serializers.IntegerField() + + class TgItemSerializer(serializers.ModelSerializer): class Meta: model = TgItem @@ -16,16 +29,28 @@ class TgItemSerializer(serializers.ModelSerializer): class TgStatItemSerializer(serializers.Serializer): - # location = serializers.CharField() location = serializers.SerializerMethodField() inv_count = serializers.IntegerField() + # tmc_count = serializers.IntegerField() + tmc = serializers.SerializerMethodField() def get_location(self, obj): - queryset = Territory.objects.get(id=obj.get('location__parent')) + queryset = Territory.objects.get(id=obj.get("location__parent")) serializer = TerritorySerializer(queryset) return serializer.data + def get_tmc(self, obj): + queryset = ( + TmcElement.objects.filter(id__in=obj.get("tmc")) + .values("tmc__name") + .annotate(count=Count("id")) + ) + logger.info(queryset) + serializer = TmcElementSerializer(queryset, many=True) + + return serializer.data + class Meta: depth = 2 diff --git a/back/tgbot/views.py b/back/tgbot/views.py index bb079c0..9324b49 100644 --- a/back/tgbot/views.py +++ b/back/tgbot/views.py @@ -12,9 +12,10 @@ from rest_framework.response import Response from rest_framework.decorators import action from django_filters.rest_framework import DjangoFilterBackend -from django.db.models import Count +from django.db.models import Count, Subquery, OuterRef, Value +from django.db.models.functions import Concat +from django.contrib.postgres.aggregates import ArrayAgg -from tmc.models import TerritoryItem, Territory from .tgbot import TgBot from .updater import tg_bot_updater_instance from .models import TgItem, TmcElement, TmcField @@ -133,7 +134,13 @@ class TmcStatViewset(viewsets.ViewSet): .values("location__parent") .annotate( inv_count=Count("location__parent"), + tmc_count=Count("tmc__tmc_id", distinct=True) ) + .annotate( + tmc=ArrayAgg("tmc"), + ) + # .values("tmc__tmc_id") ) + logger.info(queryset) serializer = TgStatItemSerializer(queryset, many=True) return Response(serializer.data)