annotate in serializer
This commit is contained in:
parent
93b60444ea
commit
e6079daf32
|
@ -1,13 +1,26 @@
|
||||||
from rest_framework import serializers
|
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 tmc.serializers import TerritorySerializer
|
||||||
from .models import TgItem, TmcField
|
from .models import TgItem, TmcElement, TmcField
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
logger = logging.getLogger("root")
|
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 TgItemSerializer(serializers.ModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = TgItem
|
model = TgItem
|
||||||
|
@ -16,16 +29,28 @@ class TgItemSerializer(serializers.ModelSerializer):
|
||||||
|
|
||||||
|
|
||||||
class TgStatItemSerializer(serializers.Serializer):
|
class TgStatItemSerializer(serializers.Serializer):
|
||||||
# location = serializers.CharField()
|
|
||||||
location = serializers.SerializerMethodField()
|
location = serializers.SerializerMethodField()
|
||||||
inv_count = serializers.IntegerField()
|
inv_count = serializers.IntegerField()
|
||||||
|
# tmc_count = serializers.IntegerField()
|
||||||
|
tmc = serializers.SerializerMethodField()
|
||||||
|
|
||||||
def get_location(self, obj):
|
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)
|
serializer = TerritorySerializer(queryset)
|
||||||
|
|
||||||
return serializer.data
|
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:
|
class Meta:
|
||||||
depth = 2
|
depth = 2
|
||||||
|
|
||||||
|
|
|
@ -12,9 +12,10 @@ from rest_framework.response import Response
|
||||||
from rest_framework.decorators import action
|
from rest_framework.decorators import action
|
||||||
|
|
||||||
from django_filters.rest_framework import DjangoFilterBackend
|
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 .tgbot import TgBot
|
||||||
from .updater import tg_bot_updater_instance
|
from .updater import tg_bot_updater_instance
|
||||||
from .models import TgItem, TmcElement, TmcField
|
from .models import TgItem, TmcElement, TmcField
|
||||||
|
@ -133,7 +134,13 @@ class TmcStatViewset(viewsets.ViewSet):
|
||||||
.values("location__parent")
|
.values("location__parent")
|
||||||
.annotate(
|
.annotate(
|
||||||
inv_count=Count("location__parent"),
|
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)
|
serializer = TgStatItemSerializer(queryset, many=True)
|
||||||
return Response(serializer.data)
|
return Response(serializer.data)
|
||||||
|
|
Loading…
Reference in New Issue