def add_view(self, request, form_url="", extra_context=None): """ Custom add view without inlines/formsets """ model = self.model opts = model._meta # FIXME: return 404 if request is non-ajax if not self.has_add_permission(request): raise PermissionDenied c = request.GET.get("c", 1) s = request.GET.get("s") group = Group.objects.get(pk=s) prefix = "plugin_%s" % c ModelForm = self.get_form(request) form = ModelForm(prefix=prefix) adminForm = AdminForm(form, list(self.get_fieldsets(request)), self.get_prepopulated_fields(request), self.get_readonly_fields(request), model_admin=self) adminForm.can_delete = False adminForm.sortable_field_name = "position" adminForm.verbose_name = self.model._meta.verbose_name adminForm.original = None adminForm.prefix = prefix adminForm.app_label = self.model._meta.app_label adminForm.model_name = self.model.__name__.lower() # FIXME: ModelBase ??? adminForm.inline_classes = adminForm.model_admin.inline_classes_add context = { "adminform": adminForm, "pluginmedia": self.media, "errors": AdminErrorList(form, []), "app_label": opts.app_label, } context.update(extra_context or {}) return self.render_change_form(request, context, form_url=form_url, add=True)
def get_plugin_admin_form(self, request, prefix, model, modeladmin, form, group=None, obj=None): """ Returns a single admin form for a given container plugin """ #readonly_fields = modeladmin.get_readonly_fields(request) readonly_fields = modeladmin.get_readonly_fields(request, obj) af = AdminForm(form, list(modeladmin.get_fieldsets(request, obj)), modeladmin.get_prepopulated_fields(request, obj), readonly_fields, model_admin=modeladmin) af.prefix = prefix af.original = obj af.group = group af.can_delete = True af.sortable_field_name = "position" af.app_label = model._meta.app_label af.model_name = model.__name__.lower() af.verbose_name = model._meta.verbose_name af.inline_classes = modeladmin.inline_classes_change af.delete = request.POST.get("%s-DELETE" % prefix, 0) af.adminmedia = modeladmin.media # important for ajax calls return af