-
-
Notifications
You must be signed in to change notification settings - Fork 145
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Cria model forms dinâmicos para poder validar inputs de querystring #455
Conversation
Acho que o caminho é esse mesmo, mas não poderíamos colocar esse código em |
Show @turicas! Sim, vou mover isso pro form com certeza. Esse PR era só prova de conceito pra garantir que dava para criar o form. |
@turicas agora esse PR tá liberado para review com a validação rolando tanto no frontend quanto na API. Dá uma assistida neste vídeo de demo e diz o que você acha das questões que trago no final dele. |
Alguns comentários gerais sobre o vídeo (se puder, cria issue pra endereçá-los? Acho que nem tudo é do escopo desse PR):
|
Ao meu ver isso tem um pouco a ver com a issue #440 também, certo? Concordo em reestruturar os schemas para sermos mais versáteis no nosso sistema. Mas você acha que já não vale serializarmos esses dados hoje do jeito que a modelagem está e depois refatorarmos. Eu penso em algo como: {
"fields": [
{
"name": "date",
"type": "string"
},
{
"name": "state",
"type": "string"
},
{
"name": "url",
"type": "string"
},
{
"name": "notes",
"type": "string"
}
],
"filters": {
"date": {"type": "string", "choices": ["2020-10-01", "2020-09-30"]}
},
"name": "boletim",
"data_url": "http://localhost:8000/api/dataset/covid19/boletim/data/",
"import_date": "2020-09-27T13:22:41.225767-03:00"
} Acho que, nesse PR atualizar o serializer do endpoint
Putz, pode crer! Criei a issue #458
Show! Vou atualizar o PR com isso então 👍
Teria que olhar mais a fundo o |
@turicas testes adicionados =) |
|
Criei a issue #460 para endereçar o teste, vou fazer o merge. |
Fixes #242
Fixes #109
@turicas esse PR ainda está como WIP e prova de conceito de que conseguimos usar os model forms dinâmicos para sanitizar esses input. Como esse caminho mostra que é possível, acho que vale uma refatoração grande em como a rota de detalhes de um dataset (da interface web, não da API) renderiza o form e manipula a querystring.
Acho que daria para construir esse form dinâmico fora desse método tão específico em que o coloquei agora. Poderíamos, por exemplo, construílo-na view e usá-lo no template do django para renderizar os inputs/valores selecionados. Eu fiz dessa forma bruta para conseguir validar no ponto mais próximo da filtragem sem me preocupar com muitas integrações. Queria alinhar contigo e ver se você acha que vale a pena seguir o caminho de uma refatoração grande no template.
Apesar do DRF não possui nenhuma API muito explícita como o
modelform_factory
podemos seguir a mesma estratégia por lá também. No DRF vai ser ainda mais fácil porque é simplesmente só levantar a exceção de validação do serializer que ele já dá conta de retornar a resposta 400 com os erros.