Часто в проектах использую 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
Комментарии