Я не нашел хорошего способа добавить количество моделей на главной странице администратора, но вот решение, которое я наконец-то использую.
Короче, я вычисляю количество каждой модели в сигналах post_deleteи методы post_save, сохраняют переменные в пользовательском запросе (на карте) и отображают его в расширенном административном index.html, просто проверяя с помощью if для каждой желаемой модели.
Расширенные templates /admin / index.html :
{% if model.perms.change %}
<th scope="row"><a href="{{ model.admin_url }}">{{ model.name }}
{% if model.name == "Mymodel1_verbose_name_plural" %} ({{ MODELS_COUNT.Mymodel1}}) {% endif %}
</a></th>
{% else %}
Мой пользовательский запрос в util / context_processors.py:
from myproject import settings
def myproject(request):
return {
'request' : request,
'MODELS_COUNT' : settings.MODELS_COUNT
}
В моем settings.py :
MODELS_COUNT = {
'Mymodel1': None,
'Mymodel2': None
}
TEMPLATE_CONTEXT_PROCESSORS = (
...
'myproject.util.context_processors.myproject',
)
В myproject .__ init __. Py :
from django.db.models.signals import post_save, post_delete
def save_mymodel1_count(sender, instance=None, **kwargs):
if kwargs['created']:
settings.MODELS_COUNT['Mymodel1'] = Mymodel1.objects.count()
def delete_mymodel1_count(sender, instance=None, **kwargs):
settings.MODELS_COUNT['Mymodel1'] = Mymodel1.objects.count()
settings.MODELS_COUNT['Mymodel1'] = Mymodel1.objects.count()
post_save.connect(save_mymodel1_count, sender=Mymodel1)
post_delete.connect(delete_mymodel1_count, sender=Mymodel1)
Если у вас много моделей, я предлагаю преобразовать это в более общее решение.