How To
Build two steps action
This example shows how to create a button that display a form to upload a file and process it.
admin_extra_buttons/upload.html
{% extends "admin_extra_buttons/action_page.html" %}
{% load i18n static admin_list admin_urls %}
{% block action-content %}
<form method="post" enctype="multipart/form-data">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Upload</button>
</form>
{% endblock %}
admin.py
class UploadForm(forms.Form):
docfile = forms.FileField( label='Select a file')
class MyModelAdmin(ExtraButtonsMixin, admin.ModelAdmin):
@button()
def upload(self, request):
context = self.get_common_context(request, title='Upload')
if request.method == 'POST':
form = UploadForm(request.POST, request.FILES)
if form.is_valid():
downloaded_file = request.FILES['docfile']
# process file
...
...
return redirect(admin_urlname(context['opts'], 'changelist') )
else:
form = UploadForm()
context['form'] = form
return TemplateResponse(request, 'admin_extra_buttons/upload.html', context)