Skip to content

Commit

Permalink
Added the ability to optionally pass extra_verbose_names to the admin…
Browse files Browse the repository at this point in the history
… actions. Added a test for that functionality. (#10)
  • Loading branch information
joshuastegmaier authored Jul 31, 2023
1 parent b9d5d45 commit aa890c8
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 4 deletions.
8 changes: 4 additions & 4 deletions tabular_export/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,19 +39,19 @@ def inner(modeladmin, request, queryset, filename=None, *args, **kwargs):


@ensure_filename('xlsx')
def export_to_excel_action(modeladmin, request, queryset, filename=None, field_names=None):
def export_to_excel_action(modeladmin, request, queryset, filename=None, field_names=None, extra_verbose_names=None):
"""Django admin action which exports selected records as an Excel XLSX download"""
headers, rows = flatten_queryset(queryset, field_names=field_names)
headers, rows = flatten_queryset(queryset, field_names=field_names, extra_verbose_names=extra_verbose_names)
return export_to_excel_response(filename, headers, rows)


export_to_excel_action.short_description = _('Export to Excel')


@ensure_filename('csv')
def export_to_csv_action(modeladmin, request, queryset, filename=None, field_names=None):
def export_to_csv_action(modeladmin, request, queryset, filename=None, field_names=None, extra_verbose_names=None):
"""Django admin action which exports the selected records as a CSV download"""
headers, rows = flatten_queryset(queryset, field_names=field_names)
headers, rows = flatten_queryset(queryset, field_names=field_names, extra_verbose_names=extra_verbose_names)
return export_to_csv_response(filename, headers, rows)


Expand Down
21 changes: 21 additions & 0 deletions tests/test_admin_actions.py
Original file line number Diff line number Diff line change
Expand Up @@ -67,3 +67,24 @@ def test_export_to_csv_action(self):
self.assertRegexpMatches(content[0], r'^ID,title,tags_count')
self.assertRegexpMatches(content[1], r'^1,TEST ITEM 1,0\r\n')
self.assertRegexpMatches(content[2], r'^2,TEST ITEM 2,0\r\n')

def test_custom_export_to_csv_action(self):
changelist_url = reverse('admin:tests_testmodel_changelist')

data = {'action': 'custom_export_to_csv_action',
'select_across': 1,
'index': 0,
ACTION_CHECKBOX_NAME: TestModel.objects.first().pk}
response = self.client.post(changelist_url, data)
self.assertEqual(response.status_code, 200)
self.assertIn('Content-Disposition', response)
self.assertEqual("attachment; filename*=UTF-8''test%20models.csv",
response['Content-Disposition'])
self.assertEqual('text/csv; charset=utf-8',
response['Content-Type'])

content = list(i.decode('utf-8') for i in response.streaming_content)
self.assertEqual(len(content), TestModel.objects.count() + 1)
self.assertRegexpMatches(content[0], r'^ID,title,number of tags')
self.assertRegexpMatches(content[1], r'^1,TEST ITEM 1,0\r\n')
self.assertRegexpMatches(content[2], r'^2,TEST ITEM 2,0\r\n')

0 comments on commit aa890c8

Please sign in to comment.