我们从Python开源项目中,提取了以下5个代码示例,用于说明如何使用django.contrib.admin.helpers.AdminForm()。
def upload_zip(self, request): context = self.admin_site.each_context(request) context.update({ 'title': _('Upload a zip archive of photos'), 'app_label': self.model._meta.app_label, 'opts': self.model._meta, 'has_change_permission': self.has_change_permission(request) }) # Handle form request if request.method == 'POST': form = UploadZipForm(request.POST, request.FILES) if form.is_valid(): form.save(request=request) return HttpResponseRedirect('..') else: form = UploadZipForm() context['form'] = form context['adminform'] = helpers.AdminForm(form, list([(None, {'fields': form.base_fields})]), {}) return render(request, 'admin/photologue/photo/upload_zip.html', context)
def render_change_form(self, request, context, add=False, change=False, form_url='', obj=None): seo_model_admin = SeoDataAdmin(SeoData, self.admin_site) seo_form = self.get_seo_form(request, obj, change=change) context['seoDataForm'] = helpers.AdminForm( seo_form, list(seo_model_admin.get_fieldsets(request, seo_form.instance)), seo_model_admin.get_prepopulated_fields(request, seo_form.instance), seo_model_admin.get_readonly_fields(request, seo_form.instance), model_admin=seo_model_admin ) return super().render_change_form(request, context, add, change, form_url, obj)
def add_type_view(self, request, form_url=''): """ Display a choice form to select which page type to add. """ if not self.has_add_permission(request): raise PermissionDenied extra_qs = '' if request.META['QUERY_STRING']: extra_qs = '&' + request.META['QUERY_STRING'] choices = self.get_child_type_choices(request, 'add') if len(choices) == 1: return HttpResponseRedirect('?ct_id={0}{1}'.format(choices[0][0], extra_qs)) # Create form form = self.add_type_form( data=request.POST if request.method == 'POST' else None, initial={'ct_id': choices[0][0]} ) form.fields['ct_id'].choices = choices if form.is_valid(): return HttpResponseRedirect('?ct_id={0}{1}'.format(form.cleaned_data['ct_id'], extra_qs)) # Wrap in all admin layout fieldsets = ((None, {'fields': ('ct_id',)}),) adminForm = AdminForm(form, fieldsets, {}, model_admin=self) media = self.media + adminForm.media opts = self.model._meta context = { 'title': _('Add %s') % force_text(opts.verbose_name), 'adminform': adminForm, 'is_popup': ("_popup" in request.POST or "_popup" in request.GET), 'media': mark_safe(media), 'errors': AdminErrorList(form, ()), 'app_label': opts.app_label, } return self.render_add_type_form(request, context, form_url)
def edit_field(self, request, object_id, language): obj = self._get_object_for_single_field(object_id, language) opts = obj.__class__._meta saved_successfully = False cancel_clicked = request.POST.get("_cancel", False) raw_fields = request.GET.get("edit_fields") fields = [field for field in raw_fields.split(",") if field in self.frontend_editable_fields] if not fields: context = { 'opts': opts, 'message': force_text(_("Field %s not found")) % raw_fields } return render(request, 'admin/cms/page/plugin/error_form.html', context) if not request.user.has_perm("{0}.change_{1}".format(self.model._meta.app_label, self.model._meta.model_name)): context = { 'opts': opts, 'message': force_text(_("You do not have permission to edit this item")) } return render(request, 'admin/cms/page/plugin/error_form.html', context) # Dinamically creates the form class with only `field_name` field # enabled form_class = self.get_form(request, obj, fields=fields) if not cancel_clicked and request.method == 'POST': form = form_class(instance=obj, data=request.POST) if form.is_valid(): form.save() saved_successfully = True else: form = form_class(instance=obj) admin_form = AdminForm(form, fieldsets=[(None, {'fields': fields})], prepopulated_fields={}, model_admin=self) media = self.media + admin_form.media context = { 'CMS_MEDIA_URL': get_cms_setting('MEDIA_URL'), 'title': opts.verbose_name, 'plugin': None, 'plugin_id': None, 'adminform': admin_form, 'add': False, 'is_popup': True, 'media': media, 'opts': opts, 'change': True, 'save_as': False, 'has_add_permission': False, 'window_close_timeout': 10, } if cancel_clicked: # cancel button was clicked context.update({ 'cancel': True, }) return render(request, 'admin/cms/page/plugin/confirm_form.html', context) if not cancel_clicked and request.method == 'POST' and saved_successfully: return render(request, 'admin/cms/page/plugin/confirm_form.html', context) return render(request, 'admin/cms/page/plugin/change_form.html', context)
def edit_title_fields(self, request, page_id, language): title = Title.objects.get(page_id=page_id, language=language) saved_successfully = False raw_fields = request.GET.get("edit_fields", 'title') edit_fields = [field for field in raw_fields.split(",") if field in self.title_frontend_editable_fields] cancel_clicked = request.POST.get("_cancel", False) opts = Title._meta if not edit_fields: # Defaults to title edit_fields = ('title',) if not has_generic_permission(title.page.pk, request.user, "change", title.page.site.pk): return HttpResponseForbidden(force_text(_("You do not have permission to edit this page"))) class PageTitleForm(django.forms.ModelForm): """ Dynamic form showing only the fields to be edited """ class Meta: model = Title fields = edit_fields if not cancel_clicked and request.method == 'POST': form = PageTitleForm(instance=title, data=request.POST) if form.is_valid(): form.save() saved_successfully = True else: form = PageTitleForm(instance=title) admin_form = AdminForm(form, fieldsets=[(None, {'fields': edit_fields})], prepopulated_fields={}, model_admin=self) media = self.media + admin_form.media context = { 'CMS_MEDIA_URL': get_cms_setting('MEDIA_URL'), 'title': 'Title', 'plugin': title.page, 'plugin_id': title.page.id, 'adminform': admin_form, 'add': False, 'is_popup': True, 'media': media, 'opts': opts, 'change': True, 'save_as': False, 'has_add_permission': False, 'window_close_timeout': 10, } if cancel_clicked: # cancel button was clicked context.update({ 'cancel': True, }) return render(request, 'admin/cms/page/plugin/confirm_form.html', context) if not cancel_clicked and request.method == 'POST' and saved_successfully: return render(request, 'admin/cms/page/plugin/confirm_form.html', context) return render(request, 'admin/cms/page/plugin/change_form.html', context)