Source code for dynamite.admin

from django.contrib import admin
from django.core.urlresolvers import clear_url_caches
from django.utils.importlib import import_module
from django.conf import settings
from dynamite import signals

[docs]def register(schema): """ This method allow to register a SchemaAttributeEntity pattern in the django admin interface :: from dynamite.admin import register from survey.models import Survey register(Survey) """ class SchemaAdmin(admin.ModelAdmin): list_display = ('name', 'slug') prepopulated_fields = {'slug' : ('name',)} inlines = [ type( 'AttributeInline', (admin.TabularInline, ), dict( model = schema._attribute, prepopulated_fields = {'slug' : ('name',)}, ) ) ] admin.site.register(schema, SchemaAdmin) for s in schema.objects.all(): reregister(s, s.entity) signals.dynamic_model_changed.connect(reregister) signals.dynamic_model_deleted.connect(unregister)
def reregister(sender, entity, **kwargs): unregister(sender, entity) admin.site.register(entity, admin_list_factory(entity)) reload(import_module(settings.ROOT_URLCONF)) clear_url_caches() def unregister(sender, entity, **kwargs): for reg_model in admin.site._registry.keys(): if entity._meta.db_table == reg_model._meta.db_table: del admin.site._registry[reg_model] try: admin.site.unregister(entity) except admin.sites.NotRegistered: pass reload(import_module(settings.ROOT_URLCONF)) clear_url_caches() def admin_list_factory(model): fields = [f.name for f in model._meta.fields if not f.auto_created] return type('EntityAdmin', (admin.ModelAdmin,), {'list_display' : fields,})