From 8898354db48d1d18f9d4b9bcac3a916bccaf52c3 Mon Sep 17 00:00:00 2001 From: Conor Holden Date: Fri, 21 Jun 2024 14:56:22 +0200 Subject: [PATCH] :sparkles:[#13] add import export to item admin --- requirements/base.in | 2 ++ requirements/base.txt | 13 +++++++++++-- requirements/ci.txt | 23 +++++++++++++++++++---- requirements/dev.txt | 30 +++++++++++++++++++++++++----- src/referentielijsten/api/admin.py | 13 ++++++++++++- src/referentielijsten/conf/base.py | 6 ++++++ 6 files changed, 75 insertions(+), 12 deletions(-) diff --git a/requirements/base.in b/requirements/base.in index d764f73..ca609a0 100644 --- a/requirements/base.in +++ b/requirements/base.in @@ -1 +1,3 @@ open-api-framework + +django-import-export[xlsx] diff --git a/requirements/base.txt b/requirements/base.txt index c62a681..8f7d80f 100644 --- a/requirements/base.txt +++ b/requirements/base.txt @@ -14,8 +14,6 @@ asgiref==3.8.1 # django-cors-headers asn1crypto==1.5.1 # via webauthn -async-timeout==4.0.3 - # via redis attrs==23.2.0 # via # glom @@ -70,6 +68,8 @@ cryptography==42.0.5 # mozilla-django-oidc # pyopenssl # webauthn +diff-match-patch==20230430 + # via django-import-export django==4.2.11 # via # commonground-api-common @@ -78,6 +78,7 @@ django==4.2.11 # django-cors-headers # django-filter # django-formtools + # django-import-export # django-jsonform # django-markup # django-otp @@ -113,6 +114,8 @@ django-filter==24.2 # open-api-framework django-formtools==2.5.1 # via django-two-factor-auth +django-import-export[xlsx]==4.0.9 + # via -r requirements/base.in django-jsonform==2.22.0 # via # mozilla-django-oidc-db @@ -173,6 +176,8 @@ ecs-logging==2.1.0 # via elastic-apm elastic-apm==6.22.0 # via open-api-framework +et-xmlfile==1.1.0 + # via openpyxl face==20.1.1 # via glom flower==2.0.1 @@ -221,6 +226,8 @@ notifications-api-common==0.2.2 # via commonground-api-common open-api-framework==0.2.0 # via -r requirements/base.in +openpyxl==3.1.4 + # via tablib orderedmultidict==1.0.1 # via furl oyaml==1.0 @@ -298,6 +305,8 @@ six==1.16.0 # python-dateutil sqlparse==0.5.0 # via django +tablib[xlsx]==3.5.0 + # via django-import-export tornado==6.4 # via flower typing-extensions==4.11.0 diff --git a/requirements/ci.txt b/requirements/ci.txt index 8737f96..1c4e599 100644 --- a/requirements/ci.txt +++ b/requirements/ci.txt @@ -21,10 +21,6 @@ asn1crypto==1.5.1 # via # -r requirements/base.txt # webauthn -async-timeout==4.0.3 - # via - # -r requirements/base.txt - # redis attrs==23.2.0 # via # -r requirements/base.txt @@ -115,6 +111,10 @@ cryptography==42.0.5 # mozilla-django-oidc # pyopenssl # webauthn +diff-match-patch==20230430 + # via + # -r requirements/base.txt + # django-import-export django==4.2.11 # via # -r requirements/base.txt @@ -124,6 +124,7 @@ django==4.2.11 # django-cors-headers # django-filter # django-formtools + # django-import-export # django-jsonform # django-markup # django-otp @@ -168,6 +169,8 @@ django-formtools==2.5.1 # via # -r requirements/base.txt # django-two-factor-auth +django-import-export[xlsx]==4.0.9 + # via -r requirements/base.txt django-jsonform==2.22.0 # via # -r requirements/base.txt @@ -270,6 +273,10 @@ elastic-apm==6.22.0 # via # -r requirements/base.txt # open-api-framework +et-xmlfile==1.1.0 + # via + # -r requirements/base.txt + # openpyxl face==20.1.1 # via # -r requirements/base.txt @@ -372,6 +379,10 @@ notifications-api-common==0.2.2 # commonground-api-common open-api-framework==0.2.0 # via -r requirements/base.txt +openpyxl==3.1.4 + # via + # -r requirements/base.txt + # tablib orderedmultidict==1.0.1 # via # -r requirements/base.txt @@ -504,6 +515,10 @@ sqlparse==0.5.0 # via # -r requirements/base.txt # django +tablib[xlsx]==3.5.0 + # via + # -r requirements/base.txt + # django-import-export tblib==3.0.0 # via -r requirements/test-tools.in tornado==6.4 diff --git a/requirements/dev.txt b/requirements/dev.txt index 0129666..75ced90 100644 --- a/requirements/dev.txt +++ b/requirements/dev.txt @@ -27,11 +27,6 @@ asn1crypto==1.5.1 # -c requirements/ci.txt # -r requirements/ci.txt # webauthn -async-timeout==4.0.3 - # via - # -c requirements/ci.txt - # -r requirements/ci.txt - # redis attrs==23.2.0 # via # -c requirements/ci.txt @@ -155,6 +150,11 @@ cryptography==42.0.5 # mozilla-django-oidc # pyopenssl # webauthn +diff-match-patch==20230430 + # via + # -c requirements/ci.txt + # -r requirements/ci.txt + # django-import-export django==4.2.11 # via # -c requirements/ci.txt @@ -167,6 +167,7 @@ django==4.2.11 # django-extensions # django-filter # django-formtools + # django-import-export # django-jsonform # django-markup # django-otp @@ -220,6 +221,10 @@ django-formtools==2.5.1 # -c requirements/ci.txt # -r requirements/ci.txt # django-two-factor-auth +django-import-export[xlsx]==4.0.9 + # via + # -c requirements/ci.txt + # -r requirements/ci.txt django-jsonform==2.22.0 # via # -c requirements/ci.txt @@ -350,6 +355,11 @@ elastic-apm==6.22.0 # -c requirements/ci.txt # -r requirements/ci.txt # open-api-framework +et-xmlfile==1.1.0 + # via + # -c requirements/ci.txt + # -r requirements/ci.txt + # openpyxl face==20.1.1 # via # -c requirements/ci.txt @@ -500,6 +510,11 @@ open-api-framework==0.2.0 # via # -c requirements/ci.txt # -r requirements/ci.txt +openpyxl==3.1.4 + # via + # -c requirements/ci.txt + # -r requirements/ci.txt + # tablib orderedmultidict==1.0.1 # via # -c requirements/ci.txt @@ -710,6 +725,11 @@ sqlparse==0.5.0 # -r requirements/ci.txt # django # django-debug-toolbar +tablib[xlsx]==3.5.0 + # via + # -c requirements/ci.txt + # -r requirements/ci.txt + # django-import-export tblib==3.0.0 # via # -c requirements/ci.txt diff --git a/src/referentielijsten/api/admin.py b/src/referentielijsten/api/admin.py index ce28703..e366628 100644 --- a/src/referentielijsten/api/admin.py +++ b/src/referentielijsten/api/admin.py @@ -2,14 +2,23 @@ from django.utils import timezone from django.utils.translation import gettext_lazy as _ +from import_export import resources +from import_export.admin import ImportExportModelAdmin + from referentielijsten.utils.admin import filter_title from .admin_list_filters import GeldigListFilter from .models import Item, Tabel +class ItemResource(resources.ModelResource): + + class Meta: + model = Item + + @admin.register(Item) -class ItemAdmin(admin.ModelAdmin): +class ItemAdmin(ImportExportModelAdmin): list_display = ("naam", "code", "tabel", "is_geldig") list_filter = ( GeldigListFilter, @@ -24,6 +33,8 @@ class ItemAdmin(admin.ModelAdmin): "aanvullende_gegevens", ) + resource_classes = [ItemResource] + @admin.display(description=_("Is geldig"), boolean=True) def is_geldig(self, obj): if ( diff --git a/src/referentielijsten/conf/base.py b/src/referentielijsten/conf/base.py index c749583..5faaf0e 100644 --- a/src/referentielijsten/conf/base.py +++ b/src/referentielijsten/conf/base.py @@ -2,6 +2,8 @@ from django.urls import reverse_lazy +from import_export.formats.base_formats import DEFAULT_FORMATS + from .api import * # noqa from .utils import config @@ -117,6 +119,7 @@ "solo", "django_jsonform", "vng_api_common", + "import_export", # Project applications. "referentielijsten.accounts", "referentielijsten.utils", @@ -470,3 +473,6 @@ SUBPATH = config("SUBPATH", None) if SUBPATH: SUBPATH = f"/{SUBPATH.strip('/')}" + + +IMPORT_EXPORT_FORMATS = DEFAULT_FORMATS