diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2022-07-21 16:45:01 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2022-12-12 12:23:17 +0100 |
commit | 0fa4634850a1891e5c42fb316d619d84a0649066 (patch) | |
tree | 440921733d43110c153fdde679654c51861dbe73 /ishtar_common/admin.py | |
parent | 70db2bc451922d7744edb8b9b2c8534837863978 (diff) | |
download | Ishtar-0fa4634850a1891e5c42fb316d619d84a0649066.tar.bz2 Ishtar-0fa4634850a1891e5c42fb316d619d84a0649066.zip |
Admin - Custom fields: exports and imports CSV, json (refs #5406)
Diffstat (limited to 'ishtar_common/admin.py')
-rw-r--r-- | ishtar_common/admin.py | 22 |
1 files changed, 20 insertions, 2 deletions
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 |