예제 #1
0
    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)
예제 #2
0
 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