diff --git a/categories/genericcollection.py b/categories/genericcollection.py index daa03dc..ecca82c 100644 --- a/categories/genericcollection.py +++ b/categories/genericcollection.py @@ -1,23 +1,32 @@ from django.contrib import admin from django.contrib.contenttypes.models import ContentType +from django.core.urlresolvers import reverse, NoReverseMatch +import json class GenericCollectionInlineModelAdmin(admin.options.InlineModelAdmin): ct_field = "content_type" ct_fk_field = "object_id" - def __init__(self, parent_model, admin_site): - super(GenericCollectionInlineModelAdmin, self).__init__(parent_model, admin_site) + def get_content_types(self): ctypes = ContentType.objects.all().order_by('id').values_list('id', 'app_label', 'model') - elements = ["%s: '%s/%s'" % (x, y, z) for x, y, z in ctypes] - self.content_types = "{%s}" % ",".join(elements) + elements = {} + for x, y, z in ctypes: + try: + elements[x] = reverse("admin:%s_%s_changelist" % (y, z)) + except NoReverseMatch: + continue + return json.dumps(elements) def get_formset(self, request, obj=None, **kwargs): result = super(GenericCollectionInlineModelAdmin, self).get_formset(request, obj, **kwargs) - result.content_types = self.content_types + result.content_types = self.get_content_types() result.ct_fk_field = self.ct_fk_field return result + class Media: + js = ('contentrelations/js/genericlookup.js', ) + class GenericCollectionTabularInline(GenericCollectionInlineModelAdmin): template = 'admin/edit_inline/gen_coll_tabular.html'