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 %}
Вернуться на верх