From ea64be25239cc13c62a895398737cafa7933c062 Mon Sep 17 00:00:00 2001 From: Étienne Loks Date: Thu, 24 Feb 2022 16:10:37 +0100 Subject: Admin: JSON field - CSV export and import --- ishtar_common/admin.py | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) (limited to 'ishtar_common/admin.py') diff --git a/ishtar_common/admin.py b/ishtar_common/admin.py index bbd61f14b..99c3b2deb 100644 --- a/ishtar_common/admin.py +++ b/ishtar_common/admin.py @@ -174,6 +174,8 @@ def export_as_csv_action( value = getattr(value, "txt_idx") elif value is None: value = "" + elif isinstance(value, ContentType): + value = f"{value.app_label}|{value.model}" else: value = str(value) row.append(value) @@ -575,11 +577,16 @@ class ImportActionAdmin(admin.ModelAdmin): elif isinstance(field, ForeignKey): if value: model = field.rel.to - try: - value = model.objects.get(**{slug_col: value}) - except model.DoesNotExist: - missing_parent.append(row.pop(k)) - continue + if model == ContentType: + value = value.split("|") + value = ContentType.objects.get(app_label=value[0], + model=value[1]) + else: + try: + value = model.objects.get(**{slug_col: value}) + except model.DoesNotExist: + missing_parent.append(row.pop(k)) + continue else: value = None row[k] = value @@ -1658,7 +1665,8 @@ class JsonDataFieldForm(JsonContentTypeFormMixin, forms.ModelForm): exclude = [] -class JsonDataFieldAdmin(admin.ModelAdmin): +class JsonDataFieldAdmin(ImportActionAdmin): + import_keys = ["key"] list_display = [ "name", "content_type", @@ -1672,9 +1680,11 @@ class JsonDataFieldAdmin(admin.ModelAdmin): actions = [ change_value("display", True, _("Display selected")), change_value("display", False, _("Hide selected")), + export_as_csv_action(), ] list_filter = ["value_type", "search_index"] form = JsonDataFieldForm + model = models.JsonDataField admin_site.register(models.JsonDataField, JsonDataFieldAdmin) -- cgit v1.2.3