diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2022-02-24 16:10:37 +0100 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2022-02-24 16:10:37 +0100 |
commit | ea64be25239cc13c62a895398737cafa7933c062 (patch) | |
tree | 871f1c39b10f44dbf9ffa105f6e1ce3a879fbdd5 | |
parent | aecbd46d0e950e6eb12c1e9142b29b16450bb92b (diff) | |
download | Ishtar-ea64be25239cc13c62a895398737cafa7933c062.tar.bz2 Ishtar-ea64be25239cc13c62a895398737cafa7933c062.zip |
Admin: JSON field - CSV export and import
-rw-r--r-- | ishtar_common/admin.py | 22 |
1 files changed, 16 insertions, 6 deletions
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) |