From df41dc144d9921cd454213290090fce40d2fdbc3 Mon Sep 17 00:00:00 2001 From: Étienne Loks Date: Wed, 18 Feb 2026 17:07:00 +0100 Subject: ✨ admin - CustomForm: JSON import/export MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ishtar_common/admin.py | 11 ++++++++--- ishtar_common/serializers.py | 10 ++++++++++ ishtar_common/serializers_utils.py | 14 +++++++++++++- 3 files changed, 31 insertions(+), 4 deletions(-) diff --git a/ishtar_common/admin.py b/ishtar_common/admin.py index 5775eada8..15624704c 100644 --- a/ishtar_common/admin.py +++ b/ishtar_common/admin.py @@ -77,7 +77,7 @@ from ishtar_common.utils import API_MAIN_CONTENT_TYPES, get_cache, create_slug,\ get_person_gdpr_log, InlineClass from ishtar_common import forms as common_forms, forms_common as other_common_forms -from ishtar_common.serializers import restore_serialized, IMPORT_MODEL_LIST +from ishtar_common.serializers import CUSTOM_FORM_LIST, restore_serialized, IMPORT_MODEL_LIST from ishtar_common.serializers_utils import generic_get_results, serialization_info from archaeological_files import forms as file_forms from archaeological_operations import forms as operation_forms @@ -1519,7 +1519,6 @@ class ImportJSONActionAdmin(admin.ModelAdmin): with open(filename, "wb+") as zipped_file: for chunk in request.FILES["json_file"].chunks(): zipped_file.write(chunk) - result = restore_serialized(filename) try: result = restore_serialized(filename) except ValueError as e: @@ -2689,7 +2688,11 @@ class JsonFieldInline(admin.TabularInline): formset = JsonFieldFormset -class CustomFormAdmin(admin.ModelAdmin): +serialize_form_action = serialize_action("custom_forms", CUSTOM_FORM_LIST) +serialize_form_action.short_description = SERIALIZE_DESC + + +class CustomFormAdmin(ImportJSONActionAdmin): list_display = [ "name", "form", @@ -2711,8 +2714,10 @@ class CustomFormAdmin(admin.ModelAdmin): "profile_types", ) autocomplete_fields = ["users"] + actions = [serialize_form_action] form = CustomFormForm inlines = [ExcludeFieldInline, JsonFieldInline] + import_keys = ["name"] def get_inline_instances(self, request, obj=None): # no inline on creation diff --git a/ishtar_common/serializers.py b/ishtar_common/serializers.py index 3cbe20907..09d482d02 100644 --- a/ishtar_common/serializers.py +++ b/ishtar_common/serializers.py @@ -170,6 +170,15 @@ def directory_serialization(archive=False, return_empty_types=False, archive_nam return full_archive +CUSTOM_FORM_LIST = [ + models.CustomForm, + models.ExcludedField, + models.JsonDataSection, + models.JsonDataField, + models.CustomFormJsonField +] + + def document_serialization( archive=False, return_empty_types=False, @@ -410,6 +419,7 @@ def restore_serialized( DIRS = ( ("types", [None]), + ("custom_forms", CUSTOM_FORM_LIST), ("common_imports", IMPORT_MODEL_LIST), ("common_configuration", CONF_MODEL_LIST), ("common_geo", GEO_MODEL_LIST), diff --git a/ishtar_common/serializers_utils.py b/ishtar_common/serializers_utils.py index a4494d9c9..35cc43aa5 100644 --- a/ishtar_common/serializers_utils.py +++ b/ishtar_common/serializers_utils.py @@ -181,7 +181,13 @@ class ItemKeySerializer(serializers.ModelSerializer): GENERIC_QUERYSET_FILTER = { - "JsonDataSection": {"JsonDataField": "json_data_field__pk__in"}, + "JsonDataSection": { + "JsonDataField": "json_data_field__pk__in", + "CustomForm": "json_data_field__custom_form_details__custom_form_id__in" + }, + "JsonDataField": { + "CustomForm": "custom_form_details__custom_form_id__in" + }, "Regexp": { "ImporterType": "columns__importer_type__pk__in", "ImporterGroup": "columns__importer_type__groups__group__pk__in", @@ -234,6 +240,12 @@ GENERIC_QUERYSET_FILTER = { }, "ImporterType": { "ImporterGroup": "groups__group__pk__in", + }, + "ExcludedField": { + "CustomForm": "custom_form_id__in" + }, + "CustomFormJsonField": { + "CustomForm": "custom_form_id__in" } } -- cgit v1.2.3