Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

295
Visualizações
no se pueden usar atributos de modelo pydantic en sugerencias de tipo

como solía hacer con las rutas FastApi, quiero hacer una función que espera un dict. Quiero escribir una sugerencia como en FastAPI con un modelo pydantic.

Tenga en cuenta que solo estoy usando FastAPI como referencia aquí y esta aplicación tiene un propósito totalmente diferente.

Lo que hice:

models.py

 from pydantic import BaseModel class Mymodel(BaseModel): name:str age:int

main.py

 def myfunc(m:Mymodel): print(m) print(m.name) myfunc({"name":"abcd","age":3})

Imprime m como un dictado normal y not Mymodel y m.name simplemente arroja un AttributeError . No entiendo por qué se comporta así porque el mismo código funcionaría en FastAPI. ¿Me estoy perdiendo de algo? ¿Qué debo hacer para que esto funcione?

Estoy esperando un argumento dict en la función, quiero escribir una sugerencia con una clase heredada de pydantic BaseModel. Entonces quiero acceder a los atributos de esa clase.

no quiero hacer:

 def myfunc(m): m = Mymodel(**m)

Gracias.

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Dado que pasa un dict a la función, se debe acceder al atributo de la siguiente manera:

 print(m['name'])

De lo contrario, para usar m.name en su lugar, debe convertir el dict al modelo Pydantic correspondiente antes de pasarlo a la función, como se muestra a continuación:

 data = {"name":"abcd", "age":3} myfunc(Mymodel(**data)) # or myfunc(Mymodel.parse_obj(data))

La razón por la que funciona pasar {"name":"abcd", "age":3} en FastAPI y luego acceder a los atributos usando el operador de punto (por ejemplo, m.name ), es que FastAPI hace la conversión anterior internamente, tan pronto como llega una solicitud. Es por eso que puede volver a convertirlo en un diccionario en su punto final, usando m.dict() . Intente, por ejemplo, pasar una key incorrecta, por ejemplo, data = {"name":"abcd","myage":3} myfunc(Mymodel(**data)) . Obtendría un error de field required (type=value_error.missing) (como parte del manejo de errores de Pydantic), similar a lo que devolvería FastAPI (como se muestra a continuación) si una solicitud similar intentara pasar (puede probar eso a través de OpenAPI en http://127.0.0.1:8000/docs ). De lo contrario, cualquier diccionario pasado por el usuario (en la forma en que se muestra en la pregunta) pasaría sin arrojar un error, en caso de que no coincidiera con el modelo de Pydantic.

 { "detail": [ { "loc": [ "body", "age" ], "msg": "field required", "type": "value_error.missing" } ] }
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda