Python django.contrib.admin.helpers 模块,AdminForm() 实例源码
我们从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,
model_admin=SEO_model_admin
)
return super().render_change_form(request, add, change, form_url, obj)
def add_type_view(self, 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, form_url)
def edit_field(self, 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, context)
# Dinamically creates the form class with only `field_name` field
# enabled
form_class = self.get_form(request, 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, context)
return render(request, 'admin/cms/page/plugin/change_form.html', context)
def edit_title_fields(self, 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, {'fields': edit_fields})],
'title': 'Title',
'plugin': title.page,
'plugin_id': title.page.id, context)