You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
50 lines
1.7 KiB
Python
50 lines
1.7 KiB
Python
# -*- coding: utf-8 -*-
|
|
from filer.fields.image import AdminImageWidget, AdminImageFormField, FilerImageField
|
|
from filer.models import File
|
|
|
|
|
|
# https://stackoverflow.com/questions/27033485/how-to-crop-an-image-selected-with-django-filer-in-django-admin
|
|
class CroppableImageWidget(AdminImageWidget):
|
|
def render(self, name, value, attrs=None):
|
|
if value:
|
|
file_obj = File.objects.get(pk=value)
|
|
attrs = attrs or {}
|
|
attrs.update({
|
|
'class': 'crop-thumb',
|
|
'data-thumbnail-url':
|
|
file_obj.thumbnails['admin_sidebar_preview'],
|
|
'data-field-name': name,
|
|
'data-org-width': file_obj.width,
|
|
'data-org-height': file_obj.height,
|
|
})
|
|
|
|
return super().render(name, value, attrs)
|
|
|
|
class Media:
|
|
js = [
|
|
'filer/js/addons/popup_handling.js',
|
|
'cms/js/libs/jquery.min.js',
|
|
'image_cropping/js/jquery.Jcrop.min.js',
|
|
'image_cropping/image_cropping.js',
|
|
]
|
|
css = {'all': ('image_cropping/css/jquery.Jcrop.min.css', 'image_cropping/css/admin_fix.css')}
|
|
|
|
|
|
class CroppableFormField(AdminImageFormField):
|
|
widget = CroppableImageWidget
|
|
|
|
|
|
class CroppableFilerImageField(FilerImageField):
|
|
default_form_class = CroppableFormField
|
|
|
|
|
|
# https://gist.github.com/specialunderwear/9d917ddacf3547b646ba
|
|
def AbstractClassWithoutFieldsNamed(cls, *excl):
|
|
if cls._meta.abstract:
|
|
remove_fields = [f for f in cls._meta.local_fields if f.name in excl]
|
|
for f in remove_fields:
|
|
cls._meta.local_fields.remove(f)
|
|
return cls
|
|
else:
|
|
raise Exception("Not an abstract model")
|