O método save é um método herdado do models.Modelqual é 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 geeksforgeekscom 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.pyarquivo 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”.
django-models-overriding-save-method
Vamos verificar o que criamos na interface de administração.
django-overriding-save-method



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.