Substituindo o método save - Modelos Django
O método save é um método herdado do models.Model
qual é executado para salvar uma instância em um modelo específico. Sempre que alguém tenta criar uma instância de um modelo a partir da interface admin ou do shell django, a função save() é executada. Podemos substituir a função de salvamento antes de armazenar os dados no banco de dados para aplicar alguma restrição ou preencher alguns campos prontos apenas como SlugField .
Tecnicamente não é recomendado substituir o método de salvamento para implementar tais funcionalidades porque qualquer erro no método de salvamento pode causar o travamento de todo o banco de dados. Portanto, se você é perfeito para escrever métodos de salvamento e tratamento de erros ou não tente o método de salvamento e tente implementar essas funcionalidades em formulários, visualizações, modelos, etc.
Django sobrescrevendo a explicação do método Save
Ilustração da substituição do método de salvamento usando um exemplo. Considere um projeto denominado geeksforgeeks
com um aplicativo denominado geeks
.
Consulte os artigos a seguir para verificar como criar um projeto e um aplicativo no Django.
Digite o seguinte código no models.py
arquivo do aplicativo geeks . Estaremos usando CharField para experimentar todas as opções de campo. Iremos sobrescrever o método save para preencher o SlugField automaticamente.
from
django.db
import
models
from
django.utils.text
import
slugify
class
GeeksModel(models.Model):
title
=
models.CharField(max_length
=
200
)
slug
=
models.SlugField()
def
save(
self
,
*
args,
*
*
kwargs):
self
.slug
=
slugify(
self
.title)
super
(GeeksModel,
self
).save(
*
args,
*
*
kwargs)
Deixe-nos explicar o que acontece no código acima. O método save() de sua classe pai deve ser sobrescrito, então usamos a palavra-chave super . slugify é uma função que converte qualquer string em um slug. portanto, estamos convertendo o título para formar basicamente um slug. Vamos tentar criar uma instância com “Gfg é o melhor site”.
Vamos verificar o que criamos na interface de administração.
Conceitos avançados com substituição do método de salvamento
Conforme definido no início deste artigo, geralmente não é recomendado substituir o método de salvamento. Deixe-nos verificar por quê?
O código acima recria o slug toda vez que o método save é usado ou se alguma alteração é feita no modelo.
A segunda razão é se alguém precisa mudar apenas o título, mas não o slug, já que o slug está redirecionando para um link específico e está se classificando em algum mecanismo de pesquisa. Um grande problema seria criado em um servidor de produção. Isso torna o uso deste método de validação, infelizmente, incorreto. Pode haver várias maneiras de resolver o problema acima, pode-se declarar o slug como campo somente leitura e, em seguida, antes de fazer qualquer alteração no slug no método sobrescrito, podemos verificar se ele está vazio. Isso pode resolver o problema. Portanto, conforme recomendado até que você seja capaz de lidar com erros no método de salvamento, não o substitua.
As postagens do blog Acervo Lima te ajudaram? Nos ajude a manter o blog no ar!
Faça uma doação para manter o blog funcionando.
70% das doações são no valor de R$ 5,00...
Diógenes Lima da Silva