Antes de salvar o modelo, redimensiono uma foto. Mas como posso verificar se uma nova imagem foi adicionada ou apenas uma descrição atualizada, para que eu possa pular o redimensionamento toda vez que o modelo for salvo?
class Model(model.Model):
image=models.ImageField(upload_to='folder')
thumb=models.ImageField(upload_to='folder')
description=models.CharField()
def save(self, *args, **kwargs):
if self.image:
small=rescale_image(self.image,width=100,height=100)
self.image_small=SimpleUploadedFile(name,small_pic)
super(Model, self).save(*args, **kwargs)
Desejo redimensionar novamente se a nova imagem for carregada ou a imagem atualizada, mas não quando a descrição for atualizada.
Respostas:
Alguns pensamentos:
Não tenho certeza se ele funcionaria bem com todas as ferramentas pseudo-auto django (Exemplo: ModelForm, contrib.admin etc).
fonte
Verifique o campo pk do modelo. Se for Nenhum, então é um novo objeto.
Editar: eu adicionei uma verificação para 'imagem' em form.changed_data. Isso pressupõe que você esteja usando o site de administração para atualizar suas imagens. Você também precisará substituir o método save_model padrão, conforme indicado abaixo.
fonte
Você pode fornecer um argumento extra para confirmar que uma nova imagem foi postada.
Algo como:
ou variável de solicitação de aprovação
Eu acho que isso não vai prejudicar sua defesa quando chamado simplesmente.
Você pode colocar isso em seu admin.py para que isso funcione também com o site de administração (na segunda das soluções acima):
fonte
O que eu fiz para alcançar o objetivo foi fazer isso ..
e abaixo do método save () é este ..
então quando eu edito alguns campos mas não editando a imagem, eu coloco isso ..
você pode substituir o
"skip creating photo thumbnail"
com"im just editing the description"
ou um texto mais formal.Espero que este ajude!
fonte
Consulte o banco de dados para um registro existente com a mesma PK. Compare os tamanhos de arquivo e as somas de verificação das imagens novas e existentes para ver se são iguais.
fonte
Django 3: Substituindo métodos de modelo predefinidos
fonte
Na nova versão, é assim:
fonte
Encontrei uma outra maneira simples de armazenar os dados no banco de dados
models.py
No banco de dados eu tenho apenas 2 variáveis
views.py
Neste, criei a instância do modelo em views.py apenas e colocando / salvando dados em 2 variáveis apenas de visualizações.
fonte