From 042b8f956369c115536dfe7e33d9c0461dafe539 Mon Sep 17 00:00:00 2001 From: Étienne Loks Date: Thu, 30 Jan 2025 13:08:34 +0100 Subject: ✨ admin: better management of Import - Item keys, import/export, links all user/imports MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ishtar_common/admin.py | 64 +++++++++++++++++++++++++------------------------- 1 file changed, 32 insertions(+), 32 deletions(-) (limited to 'ishtar_common/admin.py') diff --git a/ishtar_common/admin.py b/ishtar_common/admin.py index 7b1aa48d4..a2dfc63aa 100644 --- a/ishtar_common/admin.py +++ b/ishtar_common/admin.py @@ -281,23 +281,25 @@ def serialize_action(dir_name, model_list): else: modellist = [modeladmin.model] opts = modeladmin.model._meta + if getattr(modeladmin, "serialize_filter_queryset", None): + queryset = queryset.filter(**modeladmin.serialize_filter_queryset) result = generic_get_results( modellist, dir_name, result_queryset={opts.object_name: queryset} ) basename = str(opts).replace(".", "_") in_memory = BytesIO() - zip = zipfile.ZipFile(in_memory, "a") + current_zip = zipfile.ZipFile(in_memory, "a") for key in result.keys(): __, model_name = key - zip.writestr(dir_name + os.sep + model_name + ".json", result[key]) + current_zip.writestr(dir_name + os.sep + model_name + ".json", result[key]) # info - zip.writestr("info.json", json.dumps(serialization_info(), indent=2)) + current_zip.writestr("info.json", json.dumps(serialization_info(), indent=2)) # fix for Linux zip files read in Windows - for file in zip.filelist: - file.create_system = 0 - zip.close() + for cfile in current_zip.filelist: + cfile.create_system = 0 + current_zip.close() response = HttpResponse(content_type="application/zip") response["Content-Disposition"] = "attachment; filename={}.zip".format(basename) in_memory.seek(0) @@ -2124,15 +2126,11 @@ class ImporterGroupImporterInline(admin.TabularInline): extra = 3 -serialize_importer_group_action = serialize_action("common_imports", IMPORT_MODEL_LIST) -serialize_importer_group_action.short_description = SERIALIZE_DESC - - @admin.register(models.ImporterGroup, site=admin_site) class ImporterGroupAdmin(ImportJSONActionAdmin): list_display = ("name", "importer_types_label", "available") actions = [ - serialize_importer_group_action, + serialize_importer_action, change_value("available", True, _("Make available")), change_value("available", False, _("Make unavailable")), ] @@ -2359,6 +2357,7 @@ class ImportAdmin(admin.ModelAdmin): "creation_date", ) autocomplete_fields = ["user"] + search_fields = ("name", "importer_type__name") admin_site.register(models.Import, ImportAdmin) @@ -2377,23 +2376,6 @@ class ImportGroupAdmin(admin.ModelAdmin): autocomplete_fields = ["user"] -class TargetKeyGroupAdmin(admin.ModelAdmin): - list_display = ("name", "all_user_can_use", "all_user_can_modify", "available") - search_fields = ("name",) - - -admin_site.register(models.TargetKeyGroup, TargetKeyGroupAdmin) - - -class TargetKeyAdmin(admin.ModelAdmin): - list_display = ("target", "importer_type", "column_nb", "key", "value", "is_set") - list_filter = ("is_set", "target__column__importer_type") - search_fields = ("target__target", "value", "key") - - -admin_site.register(models.TargetKey, TargetKeyAdmin) - - class OperationTypeAdmin(GeneralTypeAdmin): extra_list_display = ["order", "preventive"] model = models.OperationType @@ -2410,12 +2392,30 @@ class SpatialReferenceSystemAdmin(GeneralTypeAdmin): admin_site.register(models.SpatialReferenceSystem, SpatialReferenceSystemAdmin) -class ItemKeyAdmin(admin.ModelAdmin): - list_display = ("content_type", "key", "content_object", "importer") - search_fields = ("key",) +@admin.register(models.ItemKey, site=admin_site) +class ItemKeyAdmin(ImportJSONActionAdmin): + list_display = ( + "content_type", "content_type_model", "key", "content_object", "linked_to_all", + "linked_to_importer_type", "linked_to_importer", "linked_to_user" + ) + search_fields = ("key", "content_type__model") + list_filter = (("content_type", admin.RelatedOnlyFieldListFilter),) + autocomplete_fields = ["user", "ishtar_import"] + actions = [ + serialize_type_action + ] + serialize_filter_queryset = { + "user__isnull": True, + "group__isnull": True, + "ishtar_import__isnull": True + } -admin_site.register(models.ItemKey, ItemKeyAdmin) +@admin.register(models.TargetKey, site=admin_site) +class TargetKeyAdmin(admin.ModelAdmin): + list_display = ("target", "importer_type", "column_nb", "key", "value", "is_set") + list_filter = ("is_set", "target__column__importer_type") + search_fields = ("target__target", "value", "key") @admin.register(models.ImportColumnValue, site=admin_site) -- cgit v1.2.3