Closed pablodanielrey closed 2 years ago
se encuentra relacionado con el issue:#7
ya resolvi el tema de la historia clínica. era un tema con el serializador y definir un update correcto dentro del serializador. `class SerializadorDePaciente(serializers.ModelSerializer): obra_social = views_personas.SerializadorDeObraSocialPersona(required=False, many=True, allow_null=True, read_only=False) historia_clinica = serializers.CharField(source='historia_clinica.historia_clinica', read_only=False)
class Meta:
model = models.Paciente
fields = ['id','nombre','apellido','dni','email','fecha_nacimiento','telefono','direccion','historia_clinica','obra_social']
def update(self, instance, validated_data):
logging.info(validated_data)
historia_clinica = validated_data.pop('historia_clinica')
instance.historia_clinica.historia_clinica = historia_clinica['historia_clinica']
instance.historia_clinica.save()
#obra_social = validated_data.pop('obra_social')
return super().update(instance, validated_data)
`
algo asi lo resulev.e
ahora queda el tema de la obra social.
que no es coherente cuando se envía y como se recibe. tenemos que charlalo entre los chicos.
por ahora creo que lo mejor es hacer funcionar lo que me están enviando desde el cliente.
{ "id": "19f779e9-e3a2-46ed-b52b-05878407ad6d", "nombre": "nombre0", "apellido": "apellido0", "dni": "0", "email": "email0@gmail.com", "fecha_nacimiento": "2021-04-01", "telefono": "221 22220", "direccion": "calle 0 la plata", "historia_clinica": "<p><br></p><p>algo de historia clinica para el nombre 0</p><p><br></p>", "obra_social": "1db43e0d-5f60-4877-853d-f680a8fdf8d6", "numero_afiliado": "1213123213" }
ese formato. el error que tira por defecto el serializador cuando valida los datos son:
{ "obra_social": { "non_field_errors": [ "Se esperaba una lista de elementos en vez del tipo \"str\"." ] } }
claramente en el campo obra social se espera una lista.
bueno lamentablemente todo el proceso de validación de los datos en base a la estrcutura del serializer no me permite hacerlo plano. usando un serializer de esta forma:
`class SerializadorDePaciente(serializers.ModelSerializer):
obra_social = serializers.CharField(source='obra_social.obra_social.nombre', required=False, read_only=False)
numero_afiliado = serializers.CharField(source='obra_social.numero_afiliado', required=False, read_only=False)
historia_clinica = serializers.CharField(source='historia_clinica.historia_clinica', read_only=False)
class Meta:
model = models.Paciente
fields = ['id','nombre','apellido','dni','email','fecha_nacimiento','telefono','direccion','historia_clinica','obra_social','numero_afiliado']
`
el único json validad que pasa es:
{'nombre': 'nombre0', 'apellido': 'apellido0', 'dni': '0', 'email': 'email0@gmail.com', 'fecha_nacimiento': datetime.date(2021, 4, 1), 'telefono': '221 22220', 'direccion': 'calle 0 la plata', 'historia_clinica': {'historia_clinica': '<p><br></p><p>algo de historia clinica para el nombre 0</p><p><br></p>'}, 'obra_social': {'obra_social': {'nombre': '1db43e0d-5f60-4877-853d-f680a8fdf8d6'}, 'numero_afiliado': '1213123213'}}
lo puedo manejar del lado del modelo pero no se si es lo mejor. voy a tratar de que lo actualice para ver como se comporta el codigo y lo charlo conlos chicos.
corregi el serializer y funciona pero no me los trae para verlos. es algún problema de lo que queremos hacer y lo que se quiere mostrar como resultado. problema de formatos que no está funcionando correctamnete. le voy a proponer a los chicos manejarlo como una lista de obras sociales. y no como campos directos.
ahora la api esta funcionando correctamnete. tuve que cambiar el serializador. se la asigno a nico para que cambie la pantalla. pero por lo menos funciona. un ejemplo de get y de puyt
PUT
http://localhost:8000/personas_api/pacientes/e9a521ac-e6f8-4f3f-a870-85fb0b0b7226/
{ "nombre": "Leditado", "apellido": "Bilbao", "dni": "32070891", "email": "leandrobilbao@gmail.com", "fecha_nacimiento": "1995-06-02", "telefono": "2211234567", "direccion": "calle falsa 123", "historia_clinica": "ufff por donde empiezo2222222- editado", "obra_social": { "obra_social": { "id": "b9d688ba-45c7-411f-b140-aac92f95d287", "nombre": "Osde" }, "numero_afiliado": "154" } }
con esa estructura funciona correctamente.
si no se le manda obra_social la elimina
{ "nombre": "Leditado", "apellido": "Bilbao", "dni": "32070891", "email": "leandrobilbao@gmail.com", "fecha_nacimiento": "1995-06-02", "telefono": "2211234567", "direccion": "calle falsa 123", "historia_clinica": "ufff por donde empiezo2222222- editado" }
cuando se le hace un GET la elimina de la entidad.
{ "id": "e9a521ac-e6f8-4f3f-a870-85fb0b0b7226", "nombre": "Leditado", "apellido": "Bilbao", "dni": "32070891", "email": "leandrobilbao@gmail.com", "fecha_nacimiento": "1995-06-02", "telefono": "2211234567", "direccion": "calle falsa 123", "historia_clinica": "ufff por donde empiezo2222222- editado", "obra_social": null }
@nicomagnani3 ya quedaría para acomodar la interface de amb de paciente. el formato de los json a enviar al servidor son el mismo que se obtiene haciendo el get. aca lo copio para tenerlo documentado a uno completo.
{ "id": "a303901c-b7fa-45ae-a113-74faf323d815", "nombre": "nombre9", "apellido": "apellido9", "dni": "9", "email": "email9@gmail.com", "fecha_nacimiento": "2021-04-10", "telefono": "221 22229", "direccion": "calle 9 la plata", "historia_clinica": "algo de historia 10", "obra_social": { "obra_social": { "id": "2e2db4a2-878b-47b0-ae24-1a9c4dbb5554", "nombre": "Osde" }, "numero_afiliado": "numero-a303901c-b7fa-45ae-a113-74faf323d815" } }
{ "id": "a303901c-b7fa-45ae-a113-74faf323d815", "nombre": "nombre9", "apellido": "apellido9", "dni": "9", "email": "email9@gmail.com", "fecha_nacimiento": "2021-04-10", "telefono": "221 22229", "direccion": "calle 9 la plata", "historia_clinica": "algo de historia 10", "obra_social": { "obra_social": { "id": "2e2db4a2-878b-47b0-ae24-1a9c4dbb5554", "nombre": "Osde" }, "numero_afiliado": "numero-a303901c-b7fa-45ae-a113-74faf323d815" } }
esta funcionando el alta,baja y modificaicon
cuando se intenta acutalizar un paciente surgen problemas con la obra social y la historia clinica del paciente. y django no lo maneja bien cuando es una relación con cardinalidad 0,1