23
23
except ImportError :
24
24
from django .contrib .admin .options import IS_POPUP_VAR
25
25
from django .core .exceptions import ObjectDoesNotExist
26
+ from django .views .generic import RedirectView
26
27
27
28
JS_PATH = getattr (settings , 'GENERICADMIN_JS' , 'genericadmin/js/' )
28
29
@@ -63,7 +64,12 @@ def get_generic_field_list(self, request, prefix=''):
63
64
fields ['prefix' ] = prefix
64
65
field_list .append (fields )
65
66
else :
66
- for field in self .model ._meta .virtual_fields :
67
+ # virtual_fields were deprecated in django 2.0
68
+ try :
69
+ fields = self .model ._meta .virtual_fields
70
+ except AttributeError :
71
+ fields = self .model ._meta .private_fields
72
+ for field in fields :
67
73
if isinstance (field , GenericForeignKey ) and \
68
74
field .ct_field not in exclude and field .fk_field not in exclude :
69
75
field_list .append ({
@@ -90,6 +96,10 @@ def wrapper(*args, **kwargs):
90
96
custom_urls = [
91
97
url (r'^obj-data/$' , wrap (self .generic_lookup ), name = 'admin_genericadmin_obj_lookup' ),
92
98
url (r'^genericadmin-init/$' , wrap (self .genericadmin_js_init ), name = 'admin_genericadmin_init' ),
99
+
100
+ # to work with django 2.0
101
+ url (r'../genericadmin-init/change/$' ,
102
+ wrap (RedirectView .as_view (pattern_name = '%s:admin_genericadmin_init' % self .admin_site .name ))),
93
103
]
94
104
return custom_urls + super (BaseGenericModelAdmin , self ).get_urls ()
95
105
0 commit comments