【问题标题】:Django Admin Inline Change ListDjango Admin 内联更改列表
【发布时间】:2009-08-17 21:10:08
【问题描述】:

我可以使用 TablularInline 和 StackedInline 类来编辑父子关系,但是我更愿意将子关系列为更改列表,因为信息很多且表格太大。 DJango 管理中是否有可用的内联更改列表或一种方式或创建一个?

【问题讨论】:

  • Django 管理中的“更改列表”是给定模型的实例列表。这里的含义是他希望他的内联显示一个简单的实例列表(带有指向每个单独编辑表单的链接),而不是内联表单的列表。

标签: python django django-admin


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    所以我实际上能够通过相当的技巧来实现这一点。 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 %}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-19
      • 1970-01-01
      • 2011-07-11
      • 2013-02-03
      • 2014-02-05
      • 2011-09-17
      • 2010-11-15
      相关资源
      最近更新 更多