Отображение русских символов в JSON полях админки Django

336 0

Часто в проектах использую JSON поля PostgreSQL.

При этом в админке Django они отображаются так как лежат в базе. Выглядит это примерно так:

{
    "1": "\u041f\u0435\u0440\u0432\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435",
    "2": "\u0412\u0442\u043e\u0440\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435"
}

Естественно это не по человечески и хотелось бы видеть в нормальном виде.

Для этого делаем следующее:

1. Добавляем файл utils.py со следующим содержимым:

import json
from django.contrib.postgres.forms.jsonb import InvalidJSONInput, JSONField


class ReadableJSONFormField(JSONField):
    def prepare_value(self, value):
        if isinstance(value, InvalidJSONInput):
            return value
        return json.dumps(value, ensure_ascii=False, indent=4)

2. В файле админки нашего приложения правим представление модели следующим образом:

from django.contrib import admin
from django.contrib.postgres.fields import JSONField
from .utils import ReadableJSONFormField


@admin.register(Example)
class ExampleAdmin(admin.ModelAdmin):
    formfield_overrides = {
        JSONField: {'form_class': ReadableJSONFormField},
    }


В итоге получаем читаемый формат пригодный для правки:

{
    "1": "Первые данные",
    "2": "Вторые данные"
}


Подсмотрел у Django комрада Elky

Комментарии

Контактные данные

 Россия, г. Москва