from rest_framework import serializers from .models import Document, Fuente, DocumentType from api.customs.models import Pedimento class DocumentSerializer(serializers.ModelSerializer): pedimento_numero = serializers.SerializerMethodField(read_only=True) pedimento = serializers.PrimaryKeyRelatedField(queryset=Pedimento.objects.all()) fuente_nombre = serializers.SerializerMethodField() fuente = serializers.PrimaryKeyRelatedField(queryset=Fuente.objects.all()) class Meta: model = Document fields = ('id', 'organizacion', 'pedimento', 'pedimento_numero', 'archivo', 'document_type', 'size', 'extension', 'fuente','fuente_nombre','created_at', 'updated_at','vu') read_only_fields = ('id', 'size', 'extension', 'created_at', 'updated_at', 'pedimento_numero') def get_pedimento_numero(self, obj): if obj.pedimento: return obj.pedimento.pedimento_app return None def validate_archivo(self, value): """Validar que se proporcione un archivo""" if not value: raise serializers.ValidationError("Se requiere un archivo para subir") return value def get_fuente_nombre(self, obj): # Método 1: Si la fuente está precargada con select_related if obj.fuente: return obj.fuente.nombre return "Desconocido" class FuenteSerializer(serializers.ModelSerializer): class Meta: model = Fuente fields = ('id', 'nombre', 'descripcion') read_only_fields = ('id','nombre', 'descripcion') class DocumentTypeSerializer(serializers.ModelSerializer): class Meta: model = DocumentType fields = ('id', 'nombre', 'descripcion') read_only_fields = ('id', 'nombre', 'descripcion')