Fundamentos de Django Rest Framework
Creación de APIs con Django REST Framework
APIs y JSON: Comunicación entre Servidores y Aplicaciones Web
Creación de APIs con Django REST Framework
Django REST: Funcionalidades y Ventajas al Crear APIs
Modelos y Serializadores en Django para DoctorApp
Uso de Serializadores en Vistas con Django REST Framework
Creación y modificación de pacientes en API REST con Django
CRUD de Recursos con Django REST Framework
Pruebas de APIs con Postman y Curl
Refactorización de Vistas: De Funciones a Clases en Django REST
Vistas Genéricas en Django: Detalle, Actualización y Eliminación
Documentación de APIs con DRF Spectacular y Swagger en Django
Vistas y Endpoints
Uso de Viewsets y Routers en Django REST Framework
Creación de acciones personalizadas en Django REST Framework
Autenticación y Autorización en APIs con Django REST Framework
Validaciones Personalizadas en Serializadores de Django REST Framework
Serializadores Avanzados
Serializadores Anidados en Django: Implementación y Uso Práctico
Cálculo de Edad y Experiencia con Serializer Method Field en Django REST
Creación y Gestión de Endpoints para Citas Médicas en Django REST
Testing y Desempeño
Pruebas Unitarias en Django: Validación de API con API Client Test
Limitación de Solicitudes en APIs con Django REST
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
A veces necesitamos calcular y mostrar valores derivados en el resultado de un endpoint sin alterar el modelo de datos original. Un ejemplo común es calcular la edad de un paciente a partir de su fecha de nacimiento. Para ello, podemos utilizar el SerializerMethodField
en Django REST Framework. Este campo permite realizar cálculos utilizando los datos del modelo, como veremos a continuación.
SerializerMethodField
?Para calcular un valor, primero debemos definir un nuevo campo en nuestro serializador usando SerializerMethodField
. Este tipo de campo permite definir un método que realizará el cálculo y retornará el valor deseado. Aquí te mostramos cómo hacerlo:
SerializerMethodField
desde el módulo serializers
.method_name
, Django REST Framework generará un nombre por defecto en la forma get_
.La clave del cálculo es restar la fecha de nacimiento del paciente a la fecha actual. Este proceso genera un objeto timedelta
, que representa la diferencia en días. Para convertirlo a años, sigue estos pasos:
date
desde el módulo datetime
, que es suficiente ya que trabajamos con fechas (no datetime
).date.today()
.from rest_framework import serializers
from datetime import date
class PatientSerializer(serializers.ModelSerializer):
age = serializers.SerializerMethodField()
def get_age(self, obj):
today = date.today()
age_timedelta = today - obj.date_of_birth
age = age_timedelta.days // 365 # Convertimos días a años
return age
class Meta:
model = Patient
fields = ['name', 'date_of_birth', 'age']
Un problema común al calcular la edad es no acceder correctamente al atributo days
del objeto timedelta
. Si simplemente restamos las fechas, obtendremos un objeto timedelta
, que necesitamos dividir por 365 para convertirlo en años.
Otro detalle importante es no incluir texto como “años” en el resultado, ya que es preferible dejar el formato de presentación (e.g., el idioma) en manos del frontend.
Siguiendo el mismo patrón que para calcular la edad, podemos calcular la experiencia de un doctor usando su fecha de inicio de trabajo. Solo es necesario reemplazar la fecha de nacimiento con la fecha de inicio laboral.
class DoctorSerializer(serializers.ModelSerializer):
experience = serializers.SerializerMethodField()
def get_experience(self, obj):
today = date.today()
experience_timedelta = today - obj.start_date
experience = experience_timedelta.days // 365
return experience
class Meta:
model = Doctor
fields = ['name', 'start_date', 'experience']
SerializerMethodField
?Aportes 5
Preguntas 0
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?