Django管理员内联更改列表

时间:2009-08-17 21:10:09

标签: python django django-admin

我可以使用TablularInline和StackedInline类编辑父子关系,但我更喜欢将子关系列为更改列表,因为有很多信息且表单太大。是否在DJango管理员中提供内联更改列表或创建一个?

2 个答案:

答案 0 :(得分:2)

内置了这样的功能,但我认为创建自己的AdminInline子类(以及它的附带模板)并不难做到这一点。只需将它从TabularInline建模,但直接显示字段的数据而不是渲染表单字段。

答案 1 :(得分:0)

所以我实际上能够通过相当的黑客实现这一目标。 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 中,从 Django 中获取 change_list.html 的大部分内容。由于我们使用的是 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