Instalação e Configuração
Instalar em seu env
pip install git+git://github.com/gkuhn1/django-admin-multiupload.git
Add 'multiupload' to your INSTALLED_APPS
INSTALLED_APPS = (
'multiupload',
)
Exemplo
model
from django.db import models
from sorl.thumbnail import ImageField
from django.template.defaultfilters import slugify
def rename_file_and_upload_to(objeto, arquivo):
"""
Essa função irá normalizar como um slug, o nome do arquivo que está sendo gravado e, irá gravá-lo
em /media/uploads/APPNAME_CLASSNAME/nome_do_arquivo_normalizado.extensao
"""
import os
caminho = str( '%s/%s' % ( objeto._meta.app_label, objeto.__class__.__name__ ) ).lower()
nome, ext = os.path.splitext( arquivo )
url = slugify( nome[:15] )
return os.path.join( 'uploads', caminho, url+ext )
class Imagem(models.Model):
class Meta:
ordering = ('nome', )
verbose_name = 'Imagem'
verbose_name_plural = 'Imagens'
nome = models.CharField(max_length=255)
img = ImageField(
u'Imagem', upload_to=rename_file_and_upload_to, max_length=255
)
def imagemAdmin(self):
from sorl.thumbnail import get_thumbnail
if self.img:
try:
im = get_thumbnail(self.img, '100x70', quality=80)
return ''.format(im.url)
except:
return ''
return ''
imagemAdmin.is_safe = True
imagemAdmin.allow_tags = True
imagemAdmin.short_description = u'Imagem'
def imagem(self):
from django.conf import settings
from sorl.thumbnail import get_thumbnail
if self.img:
try:
im = get_thumbnail(self.img, '80x45', quality=80)
return im.url
except:
return ''
return ''
def __unicode__(self):
return self.nome
def url(self):
return reverse('imagem', args=(self.slug,))
admin
# -*- coding: utf-8 -*-
from django.contrib import admin
from multiupload.admin import MultiUploadAdmin
from sorl.thumbnail.admin import AdminImageMixin
from models import Imagem
class ImagemAdmin(AdminImageMixin, MultiUploadAdmin):
list_display = ('nome', 'imagemAdmin', )
# default value of all parameters:
change_form_template = 'multiupload/change_form.html'
change_list_template = 'multiupload/change_list.html'
multiupload_template = 'multiupload/upload.html'
# if true, enable multiupload on list screen
# generaly used when the model is the uploaded element
multiupload_list = True
# if true enable multiupload on edit screen
# generaly used when the model is a container for uploaded files
# eg: gallery
# can upload files direct inside a gallery.
multiupload_form = True
# max allowed filesize for uploads in bytes
# 3 Mb
multiupload_maxfilesize = 3 * 2 ** 20
# min allowed filesize for uploads in bytes
multiupload_minfilesize = 0
# tuple with mimetype accepted
multiupload_acceptedformats = (
"image/jpeg",
"image/pjpeg",
"image/png",
)
def process_uploaded_file(self, uploaded, object, request):
# example:
title = request.POST.get('title', '') or uploaded.name
f = Imagem(nome=title, img=uploaded)
f.save()
return {
'url': f.imagem(),
'thumbnail_url': f.imagem(),
'id': f.id,
'name': f.nome,
}
def delete_file(self, pk, request):
'''
Function to delete a file.
'''
# This is the default implementation.
obj = get_object_or_404(self.queryset(request), pk=pk)
obj.delete()
admin.site.register(Imagem, ImagemAdmin)
AVISO DE SEGURANÇA (DYOR): Todo o conteúdo do wiskton.xyz tem caráter estritamente educativo e informativo. Criptoativos envolvem volatilidade e riscos cibernéticos. Jamais compartilhe sua seed phrase ou chaves privadas com terceiros.