コード例 #1
0
ファイル: options.py プロジェクト: diofeher/django-nfa
    def add_view(self, request, form_url='', extra_context=None):
        "The 'add' admin view for this model."
        model = self.model
        opts = model._meta
        app_label = opts.app_label

        if not self.has_add_permission(request):
            raise PermissionDenied

        if self.has_change_permission(request, None):
            # redirect to list view
            post_url = '../'
        else:
            # Object list will give 'Permission Denied', so go back to admin home
            post_url = '../../../'

        ModelForm = self.get_form(request)
        inline_formsets = []
        obj = self.model()
        if request.method == 'POST':
            form = ModelForm(request.POST, request.FILES)
            for FormSet in self.get_formsets(request):
                inline_formset = FormSet(data=request.POST, files=request.FILES,
                    instance=obj, save_as_new=request.POST.has_key("_saveasnew"))
                inline_formsets.append(inline_formset)
            if all_valid(inline_formsets) and form.is_valid():
                return self.save_add(request, model, form, inline_formsets, '../%s/')
        else:
            form = ModelForm(initial=dict(request.GET.items()))
            for FormSet in self.get_formsets(request):
                inline_formset = FormSet(instance=obj)
                inline_formsets.append(inline_formset)

        adminForm = AdminForm(form, list(self.get_fieldsets(request)), self.prepopulated_fields)
        media = self.media + adminForm.media
        for fs in inline_formsets:
            media = media + fs.media

        inline_admin_formsets = []
        for inline, formset in zip(self.inline_instances, inline_formsets):
            fieldsets = list(inline.get_fieldsets(request))
            inline_admin_formset = InlineAdminFormSet(inline, formset, fieldsets)
            inline_admin_formsets.append(inline_admin_formset)

        context = {
            'title': _('Add %s') % opts.verbose_name,
            'adminform': adminForm,
            'is_popup': request.REQUEST.has_key('_popup'),
            'show_delete': False,
            'media': mark_safe(media),
            'inline_admin_formsets': inline_admin_formsets,
            'root_path': self.admin_site.root_path,
        }
        context.update(extra_context or {})
        return self.render_change_form(request, model, context, add=True)
コード例 #2
0
ファイル: options.py プロジェクト: rawwell/django
    def change_view(self, request, object_id):
        "The 'change' admin view for this model."
        model = self.model
        opts = model._meta
        app_label = opts.app_label

        try:
            obj = model._default_manager.get(pk=object_id)
        except model.DoesNotExist:
            # Don't raise Http404 just yet, because we haven't checked
            # permissions yet. We don't want an unauthenticated user to be able
            # to determine whether a given object exists.
            obj = None

        if not self.has_change_permission(request, obj):
            raise PermissionDenied

        if obj is None:
            raise Http404('%s object with primary key %r does not exist.' % (opts.verbose_name, escape(object_id)))

        if request.POST and request.POST.has_key("_saveasnew"):
            return self.add_view(request, form_url='../../add/')

        ModelForm = self.get_form(request, obj)
        inline_formsets = []
        if request.method == 'POST':
            form = ModelForm(request.POST, request.FILES, instance=obj)
            for FormSet in self.get_formsets(request, obj):
                inline_formset = FormSet(request.POST, request.FILES, instance=obj)
                inline_formsets.append(inline_formset)

            if all_valid(inline_formsets) and form.is_valid():
                return self.save_change(request, model, form, inline_formsets)
        else:
            form = ModelForm(instance=obj)
            for FormSet in self.get_formsets(request, obj):
                inline_formset = FormSet(instance=obj)
                inline_formsets.append(inline_formset)

        ## Populate the FormWrapper.
        #oldform = oldforms.FormWrapper(manipulator, new_data, errors)
        #oldform.original = manipulator.original_object
        #oldform.order_objects = []

        ## TODO: Should be done in flatten_data  / FormWrapper construction
        #for related in opts.get_followed_related_objects():
            #wrt = related.opts.order_with_respect_to
            #if wrt and wrt.rel and wrt.rel.to == opts:
                #func = getattr(manipulator.original_object, 'get_%s_list' %
                        #related.get_accessor_name())
                #orig_list = func()
                #oldform.order_objects.extend(orig_list)
                
        adminForm = AdminForm(form, self.get_fieldsets(request, obj), self.prepopulated_fields)
        media = self.media + adminForm.media
        for fs in inline_formsets:
            media = media + fs.media

        inline_admin_formsets = []
        for inline, formset in zip(self.inline_instances, inline_formsets):
            fieldsets = list(inline.get_fieldsets(request, obj))
            inline_admin_formset = InlineAdminFormSet(inline, formset, fieldsets)
            inline_admin_formsets.append(inline_admin_formset)

        c = template.RequestContext(request, {
            'title': _('Change %s') % opts.verbose_name,
            'adminform': adminForm,
            'object_id': object_id,
            'original': obj,
            'is_popup': request.REQUEST.has_key('_popup'),
            'media': mark_safe(media),
            'inline_admin_formsets': inline_admin_formsets,
        })
        return self.render_change_form(request, model, c, change=True, obj=obj)