From 0fa4634850a1891e5c42fb316d619d84a0649066 Mon Sep 17 00:00:00 2001 From: Étienne Loks Date: Thu, 21 Jul 2022 16:45:01 +0200 Subject: Admin - Custom fields: exports and imports CSV, json (refs #5406) --- ishtar_common/admin.py | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) (limited to 'ishtar_common/admin.py') diff --git a/ishtar_common/admin.py b/ishtar_common/admin.py index 86a9af8e8..3e388d615 100644 --- a/ishtar_common/admin.py +++ b/ishtar_common/admin.py @@ -193,6 +193,8 @@ def export_as_csv_action( value = "" elif isinstance(value, ContentType): value = f"{value.app_label}|{value.model}" + elif hasattr(value, "natural_key"): + value = "||".join(value.natural_key()) else: value = str(value) row.append(value) @@ -203,6 +205,7 @@ def export_as_csv_action( export_as_csv.short_description = description return export_as_csv + def export_as_geojson_action( geometry_field, description=_("Export selected as GeoJSON file"), @@ -664,6 +667,14 @@ class ImportActionAdmin(admin.ModelAdmin): value = value.split("|") value = ContentType.objects.get(app_label=value[0], model=value[1]) + elif "||" in value: + try: + value = model.objects.get_by_natural_key( + *value.split("||") + ) + except model.DoesNotExist: + missing_parent.append(row.pop(k)) + break else: for slug_col2 in self.import_keys: try: @@ -1790,7 +1801,13 @@ class JsonDataFieldForm(JsonContentTypeFormMixin, forms.ModelForm): exclude = [] -class JsonDataFieldAdmin(ImportActionAdmin): +serialize_json_action = serialize_action( + "types", [models.JsonDataSection, models.JsonDataField] +) +serialize_json_action.short_description = SERIALIZE_DESC + + +class JsonDataFieldAdmin(ImportActionAdmin, ImportJSONActionAdmin): import_keys = ["key"] list_display = [ "name", @@ -1803,9 +1820,10 @@ class JsonDataFieldAdmin(ImportActionAdmin): "section", ] actions = [ + export_as_csv_action(), + serialize_json_action, change_value("display", True, _("Display selected")), change_value("display", False, _("Hide selected")), - export_as_csv_action(), ] list_filter = ["value_type", "search_index"] form = JsonDataFieldForm -- cgit v1.2.3