Files
backend/api/record/serializers.py

64 lines
2.3 KiB
Python

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):
# Si es un diccionario (durante create)
if isinstance(obj, dict):
pedimento = obj.get('pedimento')
if pedimento and hasattr(pedimento, 'pedimento_app'):
return pedimento.pedimento_app
return None
# Si es una instancia del modelo (durante retrieve/list)
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):
"""Obtiene el nombre de la fuente de forma segura"""
if isinstance(obj, dict):
fuente = obj.get('fuente')
if fuente and hasattr(fuente, 'nombre'):
return fuente.nombre
return "Desconocido"
try:
if obj.fuente:
return obj.fuente.nombre
except AttributeError:
pass
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')