-
Notifications
You must be signed in to change notification settings - Fork 137
/
Copy pathadmin.py
34 lines (27 loc) · 1.43 KB
/
admin.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import copy
from django.contrib.admin.widgets import AdminFileWidget
from cloudinary.models import CloudinaryField
from cloudinary.forms import CloudinaryJsFileField, CloudinaryUnsignedJsFileField
from cloudinary.widgets import AdminCloudinaryJSFileWidget
FORMFIELD_FOR_CLOUDINARY_FIELDS_DEFAULTS = {
CloudinaryField: {'widget': AdminFileWidget},
}
class CloudinaryFieldsAdminMixin:
"""Mixin for making the fancy widgets work in Django Admin."""
def __init__(self, *args, **kwargs):
super(CloudinaryFieldsAdminMixin, self).__init__(*args, **kwargs)
overrides = FORMFIELD_FOR_CLOUDINARY_FIELDS_DEFAULTS.copy()
overrides.update(self.formfield_overrides)
self.formfield_overrides = overrides
def formfield_for_dbfield(self, db_field, request, **kwargs):
if isinstance(db_field, CloudinaryField) and \
db_field.default_form_class in (CloudinaryJsFileField,
CloudinaryUnsignedJsFileField):
for klass in db_field.__class__.mro():
if klass in self.formfield_overrides:
kwargs = dict(
copy.deepcopy(self.formfield_overrides[klass]),
widget=AdminCloudinaryJSFileWidget, **kwargs)
return db_field.formfield(**kwargs)
return super(CloudinaryFieldsAdminMixin, self).formfield_for_dbfield(
db_field, request, **kwargs)