to_inventory/back/tgbot/serializers.py

62 lines
1.5 KiB
Python

from rest_framework import serializers
from django.db.models import Count
from tmc.models import Territory, CustomTable
from tmc.serializers import TerritorySerializer
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
fields = "__all__"
depth = 3
class TgStatItemSerializer(serializers.Serializer):
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"))
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
class TmcFieldSerializer(serializers.ModelSerializer):
class Meta:
model = TmcField
fields = "__all__"