Я могу редактировать родительско-дочерние отношения с помощью классов TablularInline и StackedInline, однако я бы предпочел перечислить дочерние отношения в виде списка изменений, так как информации много, а формы слишком велики. Есть ли встроенный список изменений, доступный в администраторе DJango, или способ его создания?

7
stinkypyper 18 Авг 2009 в 01:10
1
«Список изменений» в админке Django — это список экземпляров для данной модели. Подразумевается, что он хочет, чтобы его встроенная форма отображала простой список экземпляров (со ссылкой на отдельную форму редактирования для каждого), а не список встроенных форм.
 – 
Carl Meyer
25 Авг 2009 в 22:47

2 ответа

Такой встроенной функциональности нет, но я не думаю, что будет сложно создать свой собственный подкласс AdminInline (и соответствующий шаблон для него), который будет это делать. Просто смоделируйте его на основе TabularInline, но отображайте данные полей напрямую, а не рендеринг полей формы.

3
Carl Meyer 25 Авг 2009 в 22:46

Так что я действительно смог добиться этого с помощью довольно хитрого хака. Django Admin нуждается в некоторых обновлениях, и InlineAnything будет одним из них.

Загрузить библиотеку: https://github.com/smartlgt/django-fakeinline

class MyInlineTest(FakeInline):
  def __init__(self, parent_model, admin_site):
    super().__init__(parent_model, admin_site)
    self.template = Template('')
    self.admin_site = admin_site
    
  def get_fields(self, request, obj=None):
    dpaa = DisplayProductAccessAdmin(DisplayProductAccess, self.admin_site)
    dpaa.change_list_template = 'test.html'
    self.template = Template(dpaa.changelist_view(request, {}).rendered_content)
    return FakeInline.get_fields(self, request, obj=obj)

Затем в вашем test.html возьмите большую часть содержимого change_list.html из Django. Поскольку мы используем Jazzmin, давайте остановимся на этом.

    {% load i18n admin_urls static admin_list jazzmin %}

{% block extrastyle %}
    <link rel="stylesheet" href="{% static 'vendor/select2/css/select2.min.css' %}">

    {% if cl.formset or action_form %}
        <script type="text/javascript" src="{% url 'admin:jsi18n' %}"></script>
    {% endif %}
    {{ media.css }}
    {% if not actions_on_top and not actions_on_bottom %}
        <style>
            #changelist table thead th:first-child {width: inherit}
        </style>
    {% endif %}
{% endblock %}

{% block extrahead %}
    {{ media.js }}
{% endblock %}

{% block content %}
    <div class="col-12">
        <div class="card card-primary card-outline">
            <div class="card-header">
                <h4 class="card-title">{{ title }}{% block pretitle %}{% endblock %}</h4>
                <div class="card-tools form-inline">
                    {% block date_hierarchy %}{% if cl.date_hierarchy %}{% date_hierarchy cl %}{% endif %}{% endblock %}
                    {% block search %}
                        {% search_form cl %}
                    {% endblock %}
                </div>
            </div>

            <div class="card-body">
                <form id="changelist-form" method="post"{% if cl.formset and cl.formset.is_multipart %}enctype="multipart/form-data"{% endif %} novalidate>{% csrf_token %}
                    <div id="content-main">
                        {% if cl.formset and cl.formset.errors %}
                        <p class="errornote">
                            {% if cl.formset.total_error_count == 1 %}
                                {% trans "Please correct the error below." %}
                            {% else %}
                                {% trans "Please correct the errors below." %}
                            {% endif %}
                        </p>
                        {{ cl.formset.non_form_errors }}
                        {% endif %}
                        <div class="module{% if cl.has_filters %} filtered{% endif %}" id="changelist">
                        <div class="row">
                            <div class="col-12">
                                {% if cl.formset %}
                                    <div>{{ cl.formset.management_form }}</div>
                                {% endif %}

                                {% block result_list %}
                                    <div class="row">
                                        <div class="col-12 col-sm-8">
                                            {% if action_form and actions_on_top and cl.show_admin_actions %}
                                                {% admin_actions %}
                                            {% endif %}
                                        </div>
                                        <div class="col-12 col-sm-4">
                                            {% block object-tools %}
                                                {% block object-tools-items %}
                                                    {% change_list_object_tools %}
                                                {% endblock %}
                                            {% endblock %}
                                        </div>
                                    </div>
                                    <hr/>
                                    {% result_list cl %}
                                    {% if action_form and actions_on_bottom and cl.show_admin_actions %}
                                        <div class="row">
                                            <div class="col-12">
                                                {% admin_actions %}
                                            </div>
                                        </div>
                                    {% endif %}
                                {% endblock %}
                            </div>
                        </div>
                        <div class="row">
                            {% block pagination %}{% pagination cl %}{% endblock %}
                        </div>
                    </div>
                    </div>
                </form>
            </div>

        </div>
        <br class="clear"/>
    </div>
{% endblock %}

{% block extrajs %}
    <script type="text/javascript" src="{% static 'vendor/select2/js/select2.min.js' %}"></script>
    <script type="text/javascript" src="{% static 'jazzmin/js/change_list.js' %}"></script>
{% endblock %}

enter image description here

0
Kevin Parker 9 Июн 2021 в 16:47