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_factorypodemos 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.