62 lines
1.5 KiB
Python
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__"
|