Skip to content

Commit aa890c8

Browse files
Added the ability to optionally pass extra_verbose_names to the admin actions. Added a test for that functionality. (#10)
1 parent b9d5d45 commit aa890c8

File tree

2 files changed

+25
-4
lines changed

2 files changed

+25
-4
lines changed

tabular_export/admin.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,19 +39,19 @@ def inner(modeladmin, request, queryset, filename=None, *args, **kwargs):
3939

4040

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

4747

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

5050

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

5757

tests/test_admin_actions.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,3 +67,24 @@ def test_export_to_csv_action(self):
6767
self.assertRegexpMatches(content[0], r'^ID,title,tags_count')
6868
self.assertRegexpMatches(content[1], r'^1,TEST ITEM 1,0\r\n')
6969
self.assertRegexpMatches(content[2], r'^2,TEST ITEM 2,0\r\n')
70+
71+
def test_custom_export_to_csv_action(self):
72+
changelist_url = reverse('admin:tests_testmodel_changelist')
73+
74+
data = {'action': 'custom_export_to_csv_action',
75+
'select_across': 1,
76+
'index': 0,
77+
ACTION_CHECKBOX_NAME: TestModel.objects.first().pk}
78+
response = self.client.post(changelist_url, data)
79+
self.assertEqual(response.status_code, 200)
80+
self.assertIn('Content-Disposition', response)
81+
self.assertEqual("attachment; filename*=UTF-8''test%20models.csv",
82+
response['Content-Disposition'])
83+
self.assertEqual('text/csv; charset=utf-8',
84+
response['Content-Type'])
85+
86+
content = list(i.decode('utf-8') for i in response.streaming_content)
87+
self.assertEqual(len(content), TestModel.objects.count() + 1)
88+
self.assertRegexpMatches(content[0], r'^ID,title,number of tags')
89+
self.assertRegexpMatches(content[1], r'^1,TEST ITEM 1,0\r\n')
90+
self.assertRegexpMatches(content[2], r'^2,TEST ITEM 2,0\r\n')

0 commit comments

Comments
 (0)