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