64 lines
2.3 KiB
Python
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') |