pablodanielrey / ttps

práctica de ttps
GNU General Public License v3.0
0 stars 0 forks source link

Problemas de actualización en el abm de pacientes. de la obra social y de la historia clinica #19

Closed pablodanielrey closed 2 years ago

pablodanielrey commented 2 years ago

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

pablodanielrey commented 2 years ago

se encuentra relacionado con el issue:#7

pablodanielrey commented 2 years ago

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

pablodanielrey commented 2 years ago

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.

pablodanielrey commented 2 years ago

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 = views_personas.SerializadorDeObraSocialPersona(required=False, many=True, read_only=False)

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.

pablodanielrey commented 2 years ago

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.

pablodanielrey commented 2 years ago

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 }

pablodanielrey commented 2 years ago

@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" } }

pablodanielrey commented 2 years ago

{ "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" } }

nicomagnani3 commented 2 years ago

esta funcionando el alta,baja y modificaicon