annotate in serializer
This commit is contained in:
parent
93b60444ea
commit
e6079daf32
|
@ -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
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue