vikkyshostak
@vikkyshostak
< This head full of dreams.

Django Admin. Как получить кол-во объектов модели в шаблоне главной страницы?

Доброго времени суток!

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

Итак, у меня Django 2.0.3 на Python 3.5.3. Есть несколько моделей, например вот таких:
5abf57d0ac514248577338.png
На выходе я хотел бы получить вот такой вид:

Cities (293)
Citizenships (504)
...

Где число в скобках — это кол-во объектов c полем is_active = True у данной модели.

Вот мой шаблон главной страницы админки (./templates/admin/index.html):
{% extends "admin/base_site.html" %}
{% load i18n static %}

{% block extrastyle %}{{ block.super }}
  <link rel="stylesheet" type="text/css" href="{% static "admin/css/dashboard.css" %}"/>{% endblock %}

{% block coltype %}colMS{% endblock %}

{% block bodyclass %}{{ block.super }} dashboard{% endblock %}

{% block breadcrumbs %}{% endblock %}

{% block content %}
  <div id="content-main">

    {% if app_list %}
      {% for app in app_list %}
        <div class="app-{{ app.app_label }} module">
          <table>
            <caption>
              <a href="{{ app.app_url }}" class="section"
                 title="{% blocktrans with name=app.name %}Models in the {{ name }} application{% endblocktrans %}">{{ app.name }}</a>
            </caption>
            {% for model in app.models %}
              <tr class="model-{{ model.object_name|lower }}">
                {% if model.admin_url %}
                  <th scope="row"><a href="{{ model.admin_url }}">{{ model.name }}</a></th>
                {% else %}
                  <th scope="row">{{ model.name }}</th>
                {% endif %}

                {% if model.add_url and request.user.is_superuser %}
                  <td><a href="{{ model.add_url }}" class="addlink">{% trans 'Add' %}</a></td>
                {% else %}
                  <td>&nbsp;</td>
                {% endif %}

                {% if model.admin_url and request.user.is_superuser %}
                  <td><a href="{{ model.admin_url }}" class="changelink">{% trans 'Change' %}</a></td>
                {% else %}
                  <td>&nbsp;</td>
                {% endif %}
              </tr>
            {% endfor %}
          </table>
        </div>
      {% endfor %}
    {% else %}
      <p>{% trans "You don't have permission to edit anything." %}</p>
    {% endif %}
  </div>
{% endblock %}

Буду рад толковым комментариям.
Заранее спасибо!
  • Вопрос задан
  • 307 просмотров
Решения вопроса 2
@deliro
Кастомный тэг сделай, который будет получать аргументом модель
Ответ написан
@JekaROSS
Python Developer
Думаю, что имеет смысл кастомизации AdminSite смотрим в офф документацию и в репозиторий на метом index
Можно переопределить метод index или each_context (здесь сделать его lazy, чтобы не вычислялся для каждой страницы). А в шаблоне вывести добавленный контекст
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы