UpdateView

58 views
Skip to first unread message

Pedro Lucas

unread,
Apr 4, 2021, 11:54:19 PM4/4/21
to Django Brasil
Boa noite gente, estou com um "probleminha" aqui com relação a as class de UpdateView em um projetinho  que eu tenho que to com dificuldade de implementar, pois, me pego no dilema de "qual é a melhor/certa forma" de fazer essas classe, resumindo, não to procurando uma solução tipo *ctrl + c* *ctrl + v* não, queria uma dica/opinião, o caso se encontra no pasta de !pacientes! na minhas views, porfavor, quem poder me ajudar to quase subindo nas paredes kk

Flávyo Henrique

unread,
Apr 6, 2021, 1:41:40 PM4/6/21
to django...@googlegroups.com
Qual o motivo de você usar o UpdateView se a parte de tratamento de informações e persistir os dados na base que eram de responsabilidade do form você está fazendo "na mão" dentro do post? Tratamento de informações (se é válida ou não, se está preenchido e etc) e a sua persistência são feitas no form, não confunda as responsabilidades.

NUNCA (em caixa alta e gritando mesmo) faça queryset = Model.objects.all() nas View baseadas em Model.
Quando se faz a chamada ao método all do Queryset o Django vai no banco de dados e trás todas as informações daquela tabela, quando a sua aplicação está subindo o Django faz uma espécie de compilação onde ele irá verificar as suas views e por causa disso irá fazer uma consulta super desnecessário na sua base de dados (pense quando a sua base for grande e tiver mais de 1 milhão de registros e se for cheio de colunas), vai ficar lento para subir a aplicação, é desnecessário, perde recurso e por ai vai.
Você conhece o método get_queryset? É nele que você deve personalizar a sua consulta, mas sempre retorne um objeto Queryset pois o mesmo será usado em outros lugares pelo próprio Django e Queryset é lazy, nunca coloque uma chamada a all nesse método, se você não precisa de um filtro, quer apenas implementar o select_related ou algo semelhante eu recomendo fazer: Model.objects.select_related('campo') ou Model.objects.filter() assim continuará lazy o objeto.

O UpdateView usa o método get_object que irá retornar uma instância do objeto que está sendo editado, get_object_or_404(Endereco_pacientes.objects.all().select_related('cpf'), pk=pk) isso é totalmente desnecessário.
Esse método (get_object da classe UpdateView) vai usar o método get_queryset para recuperar os seus filtros e adicionar o filtro definido na url que vc criou (normalmente é o pk da tabela, mais pode ser um slug ou outro campo único).

Bom, não querendo ser muito extenso mais já sendo, a grosso modo você precisa arrumar esses 3 pontos e pelo que eu observei não é só na sua view de update mais em vários, use o form corretamente que ele vai te ajudar a escrever muito menos e vai corrigir muitos erros e retirar muitas falhas de programação que só de olho já consegui identificar na sua lógica.


Em seg., 5 de abr. de 2021 às 00:54, Pedro Lucas <ppedro...@gmail.com> escreveu:
Boa noite gente, estou com um "probleminha" aqui com relação a as class de UpdateView em um projetinho  que eu tenho que to com dificuldade de implementar, pois, me pego no dilema de "qual é a melhor/certa forma" de fazer essas classe, resumindo, não to procurando uma solução tipo *ctrl + c* *ctrl + v* não, queria uma dica/opinião, o caso se encontra no pasta de !pacientes! na minhas views, porfavor, quem poder me ajudar to quase subindo nas paredes kk

--
Você recebeu essa mensagem porque está inscrito no grupo "Django Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para django-brasi...@googlegroups.com.
Para ver essa discussão na Web, acesse https://groups.google.com/d/msgid/django-brasil/5448b0b6-9f18-4de6-9dcd-55fa1405f5c6n%40googlegroups.com.


--

Não tentes ser bem sucedido, tenta antes ser um homem de valor.

Albert Einstein
Reply all
Reply to author
Forward
0 new messages