diff --git a/polymorphic/admin/helpers.py b/polymorphic/admin/helpers.py index 2d6e851..33221e8 100644 --- a/polymorphic/admin/helpers.py +++ b/polymorphic/admin/helpers.py @@ -3,7 +3,12 @@ Rendering utils for admin forms; This makes sure that admin fieldsets/layout settings are exported to the template. """ +import json + from django.contrib.admin.helpers import InlineAdminFormSet, InlineAdminForm, AdminField +from django.utils.encoding import force_text +from django.utils.text import capfirst +from django.utils.translation import ugettext from polymorphic.formsets import BasePolymorphicModelFormSet @@ -77,6 +82,29 @@ class PolymorphicInlineAdminFormSet(InlineAdminFormSet): fields.update(child_inline.get_prepopulated_fields(self.request, self.obj)) return fields + def inline_formset_data(self): + """ + A JavaScript data structure for the JavaScript code + This overrides the default Django version to add the ``childTypes`` data. + """ + verbose_name = self.opts.verbose_name + return json.dumps({ + 'name': '#%s' % self.formset.prefix, + 'options': { + 'prefix': self.formset.prefix, + 'addText': ugettext('Add another %(verbose_name)s') % { + 'verbose_name': capfirst(verbose_name), + }, + 'childTypes': [ + { + 'type': model._meta.model_name, + 'name': force_text(model._meta.verbose_name) + } for model in self.formset.child_forms.keys() + ], + 'deleteText': ugettext('Remove'), + } + }) + class PolymorphicInlineSupportMixin(object): """ diff --git a/polymorphic/static/polymorphic/js/polymorphic_inlines.js b/polymorphic/static/polymorphic/js/polymorphic_inlines.js index b321993..89225fc 100644 --- a/polymorphic/static/polymorphic/js/polymorphic_inlines.js +++ b/polymorphic/static/polymorphic/js/polymorphic_inlines.js @@ -52,6 +52,10 @@ var menuButton; var addButtons; + if(options.childTypes == null) { + throw Error("The polymorphic fieldset options.childTypes is not defined!"); + } + // For Polymorphic inlines, the add button opens a menu. var menu = '