Skip to content

Commit

Permalink
add get_export_form() to ExportMixin (#1409)
Browse files Browse the repository at this point in the history
  • Loading branch information
KamilRizatdinov committed Mar 31, 2022
1 parent 8d6e46f commit b293c83
Show file tree
Hide file tree
Showing 4 changed files with 32 additions and 2 deletions.
1 change: 1 addition & 0 deletions AUTHORS
Original file line number Diff line number Diff line change
Expand Up @@ -122,4 +122,5 @@ The following is a list of much appreciated contributors:
* josx (José Luis Di Biase)
* Jan Rydzewski
* 2ykwang (Yeongkwang Yang)
* KamilRizatdinov (Kamil Rizatdinov)
* Mark Walker
1 change: 1 addition & 0 deletions docs/changelog.rst
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ Changelog
- Improve Korean translation (#1402)
- Update example subclass widget code (#1407)
- Drop support for python3.6, django 2.2, 3.0, 3.1 (#1408)
- Add get_export_form() to ExportMixin (#1409)

2.7.1 (2021-12-23)
------------------
Expand Down
9 changes: 8 additions & 1 deletion import_export/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -399,12 +399,19 @@ def get_export_context_data(self, **kwargs):
def get_context_data(self, **kwargs):
return {}

def get_export_form(self):
"""
Get the form type used to read the export format.
"""
return ExportForm

def export_action(self, request, *args, **kwargs):
if not self.has_export_permission(request):
raise PermissionDenied

formats = self.get_export_formats()
form = ExportForm(formats, request.POST or None)
form_type = self.get_export_form()
form = form_type(formats, request.POST or None)
if form.is_valid():
file_format = formats[
int(form.cleaned_data['file_format'])
Expand Down
23 changes: 22 additions & 1 deletion tests/core/tests/test_mixins.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
from django.test.testcases import TestCase
from django.urls import reverse

from import_export import formats, forms, mixins
from import_export import admin, formats, forms, mixins


class ExportViewMixinTest(TestCase):
Expand Down Expand Up @@ -203,3 +203,24 @@ def __init__(self):
formats = m.get_export_formats()
self.assertEqual(1, len(formats))
self.assertEqual('CanExportFormat', formats[0].__name__)


class ExportMixinTest(TestCase):
class TestExportMixin(admin.ExportMixin):
def __init__(self, export_form) -> None:
super().__init__()
self.export_form = export_form

def get_export_form(self):
return self.export_form

class TestExportForm(forms.ExportForm):
pass

def test_get_export_form(self):
m = admin.ExportMixin()
self.assertEqual(forms.ExportForm, m.get_export_form())

def test_get_export_form_with_custom_form(self):
m = self.TestExportMixin(self.TestExportForm)
self.assertEqual(self.TestExportForm, m.get_export_form())

0 comments on commit b293c83

Please sign in to comment.