12
12
13
13
from django .contrib .contenttypes .models import ContentType
14
14
try :
15
- from django .utils .encoding import force_text
15
+ from django .utils .encoding import force_text
16
16
except ImportError :
17
17
from django .utils .encoding import force_unicode as force_text
18
18
from django .utils .text import capfirst
24
24
from django .contrib .admin .options import IS_POPUP_VAR
25
25
from django .core .exceptions import ObjectDoesNotExist
26
26
27
- JS_PATH = getattr (settings , 'GENERICADMIN_JS' , 'genericadmin/js/' )
27
+ JS_PATH = getattr (settings , 'GENERICADMIN_JS' , 'genericadmin/js/' )
28
28
29
29
class BaseGenericModelAdmin (object ):
30
30
class Media :
@@ -34,26 +34,26 @@ class Media:
34
34
generic_fk_fields = []
35
35
content_type_blacklist = []
36
36
content_type_whitelist = []
37
-
37
+
38
38
def __init__ (self , model , admin_site ):
39
39
try :
40
40
media = list (self .Media .js )
41
41
except :
42
42
media = []
43
43
media .append (JS_PATH + 'genericadmin.js' )
44
44
self .Media .js = tuple (media )
45
-
45
+
46
46
self .content_type_whitelist = [s .lower () for s in self .content_type_whitelist ]
47
- self .content_type_blacklist = [s .lower () for s in self .content_type_blacklist ]
48
-
47
+ self .content_type_blacklist = [s .lower () for s in self .content_type_blacklist ]
48
+
49
49
super (BaseGenericModelAdmin , self ).__init__ (model , admin_site )
50
50
51
51
def get_generic_field_list (self , request , prefix = '' ):
52
52
if hasattr (self , 'ct_field' ) and hasattr (self , 'ct_fk_field' ):
53
53
exclude = [self .ct_field , self .ct_fk_field ]
54
54
else :
55
55
exclude = []
56
-
56
+
57
57
field_list = []
58
58
if hasattr (self , 'generic_fk_fields' ) and self .generic_fk_fields :
59
59
for fields in self .generic_fk_fields :
@@ -62,19 +62,19 @@ def get_generic_field_list(self, request, prefix=''):
62
62
fields ['inline' ] = prefix != ''
63
63
fields ['prefix' ] = prefix
64
64
field_list .append (fields )
65
- else :
65
+ else :
66
66
for field in self .model ._meta .virtual_fields :
67
67
if isinstance (field , GenericForeignKey ) and \
68
68
field .ct_field not in exclude and field .fk_field not in exclude :
69
69
field_list .append ({
70
- 'ct_field' : field .ct_field ,
70
+ 'ct_field' : field .ct_field ,
71
71
'fk_field' : field .fk_field ,
72
72
'inline' : prefix != '' ,
73
73
'prefix' : prefix ,
74
74
})
75
-
75
+
76
76
if hasattr (self , 'inlines' ) and len (self .inlines ) > 0 :
77
- for FormSet , inline in zip (self .get_formsets (request ), self .get_inline_instances (request )):
77
+ for FormSet , inline in zip (self .get_formsets_with_inlines (request ), self .get_inline_instances (request )):
78
78
if hasattr (inline , 'get_generic_field_list' ):
79
79
prefix = FormSet .get_default_prefix ()
80
80
field_list = field_list + inline .get_generic_field_list (request , prefix )
@@ -86,13 +86,13 @@ def wrap(view):
86
86
def wrapper (* args , ** kwargs ):
87
87
return self .admin_site .admin_view (view )(* args , ** kwargs )
88
88
return update_wrapper (wrapper , view )
89
-
89
+
90
90
custom_urls = [
91
91
url (r'^obj-data/$' , wrap (self .generic_lookup ), name = 'admin_genericadmin_obj_lookup' ),
92
92
url (r'^genericadmin-init/$' , wrap (self .genericadmin_js_init ), name = 'admin_genericadmin_init' ),
93
93
]
94
94
return custom_urls + super (BaseGenericModelAdmin , self ).get_urls ()
95
-
95
+
96
96
def genericadmin_js_init (self , request ):
97
97
if request .method == 'GET' :
98
98
obj_dict = {}
@@ -105,7 +105,7 @@ def genericadmin_js_init(self, request):
105
105
obj_dict [c .id ] = (val , params )
106
106
elif val not in self .content_type_blacklist :
107
107
obj_dict [c .id ] = (val , params )
108
-
108
+
109
109
data = {
110
110
'url_array' : obj_dict ,
111
111
'fields' : self .get_generic_field_list (request ),
@@ -114,15 +114,15 @@ def genericadmin_js_init(self, request):
114
114
resp = json .dumps (data , ensure_ascii = False )
115
115
return HttpResponse (resp , content_type = 'application/json' )
116
116
return HttpResponseNotAllowed (['GET' ])
117
-
117
+
118
118
def generic_lookup (self , request ):
119
119
if request .method != 'GET' :
120
120
return HttpResponseNotAllowed (['GET' ])
121
-
121
+
122
122
if 'content_type' in request .GET and 'object_id' in request .GET :
123
123
content_type_id = request .GET ['content_type' ]
124
124
object_id = request .GET ['object_id' ]
125
-
125
+
126
126
obj_dict = {
127
127
'content_type_id' : content_type_id ,
128
128
'object_id' : object_id ,
@@ -136,20 +136,20 @@ def generic_lookup(self, request):
136
136
obj_dict ["object_text" ] = capfirst (force_text (obj ))
137
137
except ObjectDoesNotExist :
138
138
raise Http404
139
-
139
+
140
140
resp = json .dumps (obj_dict , ensure_ascii = False )
141
141
else :
142
142
resp = ''
143
143
return HttpResponse (resp , content_type = 'application/json' )
144
-
144
+
145
145
146
146
147
147
class GenericAdminModelAdmin (BaseGenericModelAdmin , admin .ModelAdmin ):
148
148
"""Model admin for generic relations. """
149
149
150
150
151
151
class GenericTabularInline (BaseGenericModelAdmin , GenericTabularInline ):
152
- """Model admin for generic tabular inlines. """
152
+ """Model admin for generic tabular inlines. """
153
153
154
154
155
155
class GenericStackedInline (BaseGenericModelAdmin , GenericStackedInline ):
0 commit comments