Skip to content

Commit 099c22e

Browse files
committed
Add support to skip export confirmation page with settings
1 parent fb7fc62 commit 099c22e

File tree

3 files changed

+52
-5
lines changed

3 files changed

+52
-5
lines changed

HISTORY.rst

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@ unreleased
99
* Add ability to customize the order of operation for export queryset
1010
* Add ability to set dataset title
1111
* Add field selection to the export confirmation page in the admin panel
12+
* Add support to skip export confirmation page in admin (https://github.com/saritasa-nest/django-import-export-extensions/issues/122):
13+
14+
* with `IMPORT_EXPORT_SKIP_ADMIN_EXPORT_UI=True` setting from original package
15+
* with `skip_export_form` flag at the admin model level
1216

1317
1.8.0 (2025-06-30)
1418
------------------

import_export_extensions/admin/mixins/export_mixin.py

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ class CeleryExportAdminMixin(
7171
)
7272
get_export_form_class = import_export_admin.ExportMixin.get_export_form_class # noqa
7373
get_export_resource_fields_from_form = import_export_admin.ExportMixin.get_export_resource_fields_from_form # noqa
74+
is_skip_export_form_enabled = import_export_admin.ExportMixin.is_skip_export_form_enabled # noqa
7475

7576
def get_export_context_data(self, **kwargs):
7677
"""Get context data for export."""
@@ -126,17 +127,30 @@ def celery_export_action(self, request, *args, **kwargs):
126127
raise PermissionDenied
127128

128129
formats = self.get_export_formats()
130+
resource_kwargs = self.get_export_resource_kwargs(
131+
*args,
132+
**kwargs,
133+
request=request,
134+
)
135+
if self.is_skip_export_form_enabled():
136+
job = self.create_export_job(
137+
request=request,
138+
resource_class=self.get_export_resource_classes(request)[0],
139+
resource_kwargs=resource_kwargs,
140+
file_format=formats[0],
141+
)
142+
return self._redirect_to_export_status_page(
143+
request=request,
144+
job=job,
145+
)
146+
129147
form_type = self.get_export_form_class()
130148
form = form_type(
131149
formats=formats,
132150
resources=self.get_export_resource_classes(request),
133151
data=request.POST or None,
134152
)
135-
resource_kwargs = self.get_export_resource_kwargs(
136-
*args,
137-
**kwargs,
138-
request=request,
139-
)
153+
140154
if request.method == "POST" and form.is_valid():
141155
file_format = formats[int(form.cleaned_data["format"])]
142156
# Get the selected export fields from the form

test_project/tests/integration_tests/test_admin/test_export/test_export.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import pathlib
33
import uuid
44

5+
import django.test
56
from django.contrib.auth.models import User
67
from django.test.client import Client
78
from django.urls import reverse
@@ -326,3 +327,31 @@ def test_export_using_get_params(
326327
instrument := Instrument.objects.filter(id=int(record[-1])).first()
327328
)
328329
assert instrument.title == instrument_title
330+
331+
332+
@django.test.override_settings(
333+
IMPORT_EXPORT_SKIP_ADMIN_EXPORT_UI=True,
334+
)
335+
@pytest.mark.usefixtures("existing_artist")
336+
@pytest.mark.django_db(transaction=True)
337+
def test_export_skip_confirmation_page(client: Client, superuser: User):
338+
"""Test export using Django Admin, skipping confirmation page."""
339+
client.force_login(superuser)
340+
341+
# Make get request to admin export page
342+
response = client.get(
343+
path=reverse("admin:fake_app_artist_export"),
344+
)
345+
assert response.status_code == status.HTTP_302_FOUND
346+
347+
status_response = client.get(response.url)
348+
assert status_response.status_code == status.HTTP_302_FOUND
349+
350+
result_response = client.get(status_response.url)
351+
assert result_response.status_code == status.HTTP_200_OK
352+
353+
assert ExportJob.objects.exists()
354+
export_job = ExportJob.objects.first()
355+
assert export_job.export_status == ExportJob.ExportStatus.EXPORTED, (
356+
export_job.traceback
357+
)

0 commit comments

Comments
 (0)