diff --git a/.gitignore b/.gitignore index 5301ecd..407c264 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,4 @@ MANIFEST *egg* *.bak *.tmproj +.idea \ No newline at end of file diff --git a/genericadmin/admin.py b/genericadmin/admin.py index 40aff4c..afa9aa9 100755 --- a/genericadmin/admin.py +++ b/genericadmin/admin.py @@ -23,6 +23,7 @@ except ImportError: from django.contrib.admin.options import IS_POPUP_VAR from django.core.exceptions import ObjectDoesNotExist +from django.views.generic import RedirectView JS_PATH = getattr(settings, 'GENERICADMIN_JS', 'genericadmin/js/') @@ -63,7 +64,12 @@ def get_generic_field_list(self, request, prefix=''): fields['prefix'] = prefix field_list.append(fields) else: - for field in self.model._meta.virtual_fields: + # virtual_fields were deprecated in django 2.0 + try: + fields = self.model._meta.virtual_fields + except AttributeError: + fields = self.model._meta.private_fields + for field in fields: if isinstance(field, GenericForeignKey) and \ field.ct_field not in exclude and field.fk_field not in exclude: field_list.append({ @@ -74,10 +80,16 @@ def get_generic_field_list(self, request, prefix=''): }) if hasattr(self, 'inlines') and len(self.inlines) > 0: - for FormSet, inline in zip(self.get_formsets_with_inlines(request), self.get_inline_instances(request)): - if hasattr(inline, 'get_generic_field_list'): - prefix = FormSet.get_default_prefix() - field_list = field_list + inline.get_generic_field_list(request, prefix) + try: + for FormSet, inline in zip(self.get_formsets_with_inlines(request), self.get_inline_instances(request)): + if hasattr(inline, 'get_generic_field_list'): + prefix = FormSet.get_default_prefix() + field_list = field_list + inline.get_generic_field_list(request, prefix) + except AttributeError: + for FormSet, inline in self.get_formsets_with_inlines(request): + if hasattr(inline, 'get_generic_field_list'): + prefix = FormSet.get_default_prefix() + field_list = field_list + inline.get_generic_field_list(request, prefix) return field_list @@ -90,6 +102,10 @@ def wrapper(*args, **kwargs): custom_urls = [ url(r'^obj-data/$', wrap(self.generic_lookup), name='admin_genericadmin_obj_lookup'), url(r'^genericadmin-init/$', wrap(self.genericadmin_js_init), name='admin_genericadmin_init'), + + # to work with django 2.0 + url(r'^../obj-data/$', wrap(self.generic_lookup), name='admin_genericadmin_obj_lookup_change'), + url(r'^../genericadmin-init/change/$', wrap(self.genericadmin_js_init), name='admin_genericadmin_init'), ] return custom_urls + super(BaseGenericModelAdmin, self).get_urls() diff --git a/genericadmin/static/genericadmin/js/genericadmin.js b/genericadmin/static/genericadmin/js/genericadmin.js index 529dbb9..072251a 100755 --- a/genericadmin/static/genericadmin/js/genericadmin.js +++ b/genericadmin/static/genericadmin/js/genericadmin.js @@ -73,7 +73,13 @@ }, getLookupUrl: function(cID) { - return '../../../' + this.url_array[cID][0] + '/' + this.getLookupUrlParams(cID); + var forword = '../../../'; + var suffix = '/change/'; + var href = window.location.href; + if (href.indexOf(suffix, href.length - suffix.length) !== -1) { + forword += '../'; + } + return forword + this.url_array[cID][0] + '/' + this.getLookupUrlParams(cID); }, getFkId: function() { diff --git a/setup.py b/setup.py index faf0c0f..e4395a3 100644 --- a/setup.py +++ b/setup.py @@ -12,7 +12,7 @@ def convert_readme(): setup( name='django-genericadmin', - version='0.7.0', + version='0.7.1', description="Adds support for generic relations within Django's admin interface.", author='Weston Nielson, Jan Schrewe, Arthur Hanson', author_email='wnielson@gmail.com, jschrewe@googlemail.com, worldnomad@gmail.com',