JSONField в Django Admin как встроенный
В моей модели есть JSONField, его структура представляет собой dict.
class MyModel:
final_result = models.JSONField()
Но он довольно большой, и его сложно редактировать с помощью любого JSON-виджета. Поэтому я подумал, что, возможно, мне нужно разобрать / разделить его на несколько "пользовательских" полей.
jsonfield = {
"key1": "value1",
"key2": "value2",
"key3": [
{"inner_key_1": "inner_value_1", "inner_key_2": "inner_value_2", etc}
]
}
Учитывая эти данные в формате JSON, я хотел бы иметь поля: key1, key2 (что легко), и вот проблема - key3, который представляет собой список диктовок.
Могу ли я как-то отобразить их в виде встроенных строк? С полями - inner_key_1, inner_key_2 (и т.д.) Таким образом, я могу
- отредактируйте каждый элемент списка
- удалите элемент с помощью кнопки
- добавьте еще один элемент с предустановленными полями
Когда я пытаюсь использовать встроенные файлы, он говорит, что ему нужна модель, но у меня нет модели для этого json. Прокси-модели и абстрактные модели выдают ошибки. Формы, наборы формуляров (рекомендации искусственного интеллекта) тоже не работают.
Я пробовал использовать встроенные строки, формы, наборы форм с помощью искусственного интеллекта))
Если вы перепробовали много пакетов, но по-прежнему безрезультатно, вы можете попробовать 2 разных способа:
Вариант 1: Создайте эту конкретную страницу на заказ, полностью с нуля.
Это дает вам полный контроль над макетом, логикой и выводом (HTML/JSON).
Вариант 2: Отредактируйте существующую HTML-страницу администратора Django и добавьте свой JSON (или любую пользовательскую часть).
Пример формы изменения модели:
# admin.py
class MyModelAdmin(admin.ModelAdmin):
change_form_template = "admin/myapp/mymodel/change_form.html"
def render_change_form(self, request, context, *args, **kwargs):
context["extra_json"] = {
"key1": "value1",
"key2": "value2",
"key3": [
{"inner_key_1": "inner_value_1",
"inner_key_2": "inner_value_2",
etc}
]}
return super().render_change_form(request, context, *args, **kwargs)
{# templates/admin/myapp/mymodel/change_form.html #}
{% extends "admin/change_form.html" %}
{% block after_related_objects %}
<div class="custom-block">
<h3>Extra JSON Data</h3>
<pre>{{ extra_json|safe }}</pre>
</div>
{% endblock %}