from rest_framework import serializers from .models import Nomenclature, Sticker, StickerMovement from datetime import date from django.contrib.auth.models import User class NomenclatureSerializer(serializers.ModelSerializer): class Meta: model = Nomenclature fields = '__all__' class StickerSerializer(serializers.ModelSerializer): is_expired = serializers.SerializerMethodField() is_expiring_soon = serializers.SerializerMethodField() nomenclature_name = serializers.CharField(source="nomenclature.name", read_only=True) nomenclature_gtin = serializers.CharField(source="nomenclature.gtin", read_only=True) class Meta: model = Sticker fields = '__all__' def get_is_expired(self, obj): return obj.is_expired() def get_is_expiring_soon(self, obj): return obj.is_expiring_soon() def to_representation(self, instance): """Обновляем статус при каждом запросе""" instance.save() return super().to_representation(instance) class StickerMovementSerializer(serializers.ModelSerializer): class Meta: model = StickerMovement fields = '__all__' """ Transfer sticks """ from rest_framework import serializers from .models import StickerTransferRequest, StickerTransferItem, Sticker class StickerTransferItemSerializer(serializers.ModelSerializer): class Meta: model = StickerTransferItem fields = ['id', 'sticker', 'quantity'] class StickerTransferRequestSerializer(serializers.ModelSerializer): items = StickerTransferItemSerializer(many=True) from_user = serializers.StringRelatedField(read_only=True) to_user = serializers.PrimaryKeyRelatedField(queryset=User.objects.all()) class Meta: model = StickerTransferRequest fields = ['id', 'from_user', 'to_user', 'status', 'created_at', 'items'] def create(self, validated_data): items_data = validated_data.pop('items') transfer = StickerTransferRequest.objects.create(**validated_data) for item in items_data: StickerTransferItem.objects.create(transfer=transfer, **item) return transfer