Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion LICENCE
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
Copyright (c) 2009, Weston Nielson (wnielson@gmail.com)
2010, Jan Schrewe (jschrewe@googlemail.com)
2017, Arthur Hanson (worldnomad@gmail.com)

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
Expand All @@ -17,4 +18,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
THE SOFTWARE.
Empty file modified genericadmin/__init__.py
100644 → 100755
Empty file.
40 changes: 20 additions & 20 deletions genericadmin/admin.py
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@

from django.contrib.contenttypes.models import ContentType
try:
from django.utils.encoding import force_text
from django.utils.encoding import force_text
except ImportError:
from django.utils.encoding import force_unicode as force_text
from django.utils.text import capfirst
Expand All @@ -24,7 +24,7 @@
from django.contrib.admin.options import IS_POPUP_VAR
from django.core.exceptions import ObjectDoesNotExist

JS_PATH = getattr(settings, 'GENERICADMIN_JS', 'genericadmin/js/')
JS_PATH = getattr(settings, 'GENERICADMIN_JS', 'genericadmin/js/')

class BaseGenericModelAdmin(object):
class Media:
Expand All @@ -34,26 +34,26 @@ class Media:
generic_fk_fields = []
content_type_blacklist = []
content_type_whitelist = []

def __init__(self, model, admin_site):
try:
media = list(self.Media.js)
except:
media = []
media.append(JS_PATH + 'genericadmin.js')
self.Media.js = tuple(media)

self.content_type_whitelist = [s.lower() for s in self.content_type_whitelist]
self.content_type_blacklist = [s.lower() for s in self.content_type_blacklist]
self.content_type_blacklist = [s.lower() for s in self.content_type_blacklist]

super(BaseGenericModelAdmin, self).__init__(model, admin_site)

def get_generic_field_list(self, request, prefix=''):
if hasattr(self, 'ct_field') and hasattr(self, 'ct_fk_field'):
exclude = [self.ct_field, self.ct_fk_field]
else:
exclude = []

field_list = []
if hasattr(self, 'generic_fk_fields') and self.generic_fk_fields:
for fields in self.generic_fk_fields:
Expand All @@ -62,19 +62,19 @@ def get_generic_field_list(self, request, prefix=''):
fields['inline'] = prefix != ''
fields['prefix'] = prefix
field_list.append(fields)
else:
else:
for field in self.model._meta.virtual_fields:
if isinstance(field, GenericForeignKey) and \
field.ct_field not in exclude and field.fk_field not in exclude:
field_list.append({
'ct_field': field.ct_field,
'ct_field': field.ct_field,
'fk_field': field.fk_field,
'inline': prefix != '',
'prefix': prefix,
})

if hasattr(self, 'inlines') and len(self.inlines) > 0:
for FormSet, inline in zip(self.get_formsets(request), self.get_inline_instances(request)):
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)
Expand All @@ -86,13 +86,13 @@ def wrap(view):
def wrapper(*args, **kwargs):
return self.admin_site.admin_view(view)(*args, **kwargs)
return update_wrapper(wrapper, view)

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'),
]
return custom_urls + super(BaseGenericModelAdmin, self).get_urls()

def genericadmin_js_init(self, request):
if request.method == 'GET':
obj_dict = {}
Expand All @@ -105,7 +105,7 @@ def genericadmin_js_init(self, request):
obj_dict[c.id] = (val, params)
elif val not in self.content_type_blacklist:
obj_dict[c.id] = (val, params)

data = {
'url_array': obj_dict,
'fields': self.get_generic_field_list(request),
Expand All @@ -114,15 +114,15 @@ def genericadmin_js_init(self, request):
resp = json.dumps(data, ensure_ascii=False)
return HttpResponse(resp, content_type='application/json')
return HttpResponseNotAllowed(['GET'])

def generic_lookup(self, request):
if request.method != 'GET':
return HttpResponseNotAllowed(['GET'])

if 'content_type' in request.GET and 'object_id' in request.GET:
content_type_id = request.GET['content_type']
object_id = request.GET['object_id']

obj_dict = {
'content_type_id': content_type_id,
'object_id': object_id,
Expand All @@ -136,20 +136,20 @@ def generic_lookup(self, request):
obj_dict["object_text"] = capfirst(force_text(obj))
except ObjectDoesNotExist:
raise Http404

resp = json.dumps(obj_dict, ensure_ascii=False)
else:
resp = ''
return HttpResponse(resp, content_type='application/json')



class GenericAdminModelAdmin(BaseGenericModelAdmin, admin.ModelAdmin):
"""Model admin for generic relations. """


class GenericTabularInline(BaseGenericModelAdmin, GenericTabularInline):
"""Model admin for generic tabular inlines. """
"""Model admin for generic tabular inlines. """


class GenericStackedInline(BaseGenericModelAdmin, GenericStackedInline):
Expand Down
8 changes: 4 additions & 4 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,11 @@ def convert_readme():

setup(
name='django-genericadmin',
version='0.6.1',
version='0.7.0',
description="Adds support for generic relations within Django's admin interface.",
author='Weston Nielson, Jan Schrewe',
author_email='wnielson@gmail.com, jschrewe@googlemail.com',
url='https://github.com/jschrewe/django-genericadmin',
author='Weston Nielson, Jan Schrewe, Arthur Hanson',
author_email='wnielson@gmail.com, jschrewe@googlemail.com, worldnomad@gmail.com',
url='https://github.com/arthanson/django-genericadmin',
packages = ['genericadmin'],
# package_data={'genericadmin': ['static/genericadmin/js/genericadmin.js']},
classifiers=[
Expand Down