Skip to content

Instantly share code, notes, and snippets.

@dublado
Forked from StasKoval/admin.py
Created April 29, 2022 13:06
Show Gist options
  • Save dublado/983521f29535305785b6a2ddc797e705 to your computer and use it in GitHub Desktop.
Save dublado/983521f29535305785b6a2ddc797e705 to your computer and use it in GitHub Desktop.
AdminImageWidget
from django.contrib import admin
from django.db import models
from django.contrib import admin
from django.forms import forms
from django.utils.safestring import mark_safe
from django.contrib.admin.widgets import AdminFileWidget
from models import Service, Client, Proyect, Image, Country,LineAction
from cms.plugins.text.widgets.wymeditor_widget import WYMEditor
from sorl.thumbnail.admin import AdminInlineImageMixin
from django.conf.urls.defaults import patterns
class AdminImageWidget(AdminFileWidget):
def render(self, name, value, attrs=None):
output = []
if value and getattr(value, "url", None):
image_url = value.url
file_name=str(value)
# defining the size
size='100x100'
x, y = [int(x) for x in size.split('x')]
try :
# defining the filename and the miniature filename
filehead, filetail = os.path.split(value.path)
basename, format = os.path.splitext(filetail)
miniature = basename + '_' + size + format
filename = value.path
miniature_filename = os.path.join(filehead, miniature)
filehead, filetail = os.path.split(value.url)
miniature_url = filehead + '/' + miniature
# make sure that the thumbnail is a version of the current original sized image
if os.path.exists(miniature_filename) and os.path.getmtime(filename) > os.path.getmtime(miniature_filename):
os.unlink(miniature_filename)
# if the image wasn't already resized, resize it
if not os.path.exists(miniature_filename):
image = Image.open(filename)
image.thumbnail([x, y], Image.ANTIALIAS)
try:
image.save(miniature_filename, image.format, quality=100, optimize=1)
except:
image.save(miniature_filename, image.format, quality=100)
output.append(u' <div><a href="%s" target="_blank"><img src="%s" alt="%s" /></a></div> %s ' %\
(miniature_url, miniature_url, miniature_filename, _('Change:')))
except:
pass
output.append(super(AdminFileWidget, self).render(name, value, attrs))
return mark_safe(u''.join(output))
class ImageInline(AdminInlineImageMixin,admin.TabularInline):
model =Image
can_delete = True
def formfield_for_dbfield(self,db_field, **kwargs):
if isinstance(db_field, models.ImageField):
return db_field.formfield( widget = AdminImageWidget)
return super(ImageInline, self).formfield_for_dbfield(db_field, **kwargs)
class ProyectAdmin(admin.ModelAdmin):
inlines = [ImageInline]
formfield_overrides = {
# models.TextField : {'widget': WYMEditor},
}
list_display = ("name", "sequence",)
list_editable = ( "sequence", )
search_fields = ['name']
class Media:
js = (
"js/jquery-1.4.3.min.js",
"https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.9/jquery-ui.min.js",
"js/order.js")
admin.site.register(Service)
admin.site.register(Client)
admin.site.register(Country)
admin.site.register(Proyect,ProyectAdmin)
admin.site.register(LineAction)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment