Je n'ai pas trouvé de façon sympa d'ajouter le nombre de modèles dans la page d'administration principale, mais voici la solution que j'utilise enfin. En bref, je calcule les comptes de chaque modèle dans les signaux post_delete et post_save, stocke les variables dans la requête personnalisée (dans une carte) et l'affiche dans l'index admin.html en vérifiant simplement avec un if pour chaque modèles souhaités.
Le étendu 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 %}
Ma demande personnalisée dans util/context_processors.py:
from myproject import settings
def myproject(request):
return {
'request' : request,
'MODELS_COUNT' : settings.MODELS_COUNT
}
Dans mon settings.py:
MODELS_COUNT = {
'Mymodel1': None,
'Mymodel2': None
}
TEMPLATE_CONTEXT_PROCESSORS = (
...
'myproject.util.context_processors.myproject',
)
I n 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)
Si vous avez beaucoup de modèles, je vous suggère de transformer cela en une solution plus générique.
Voulez-vous obtenir le nombre de TOUS les modèles enregistrés dans admin django? – dzida
Pas nécessairement. Il y en a un en particulier qui m'intéresse. – Rog
Je suis curieux, comment avez-vous enfin résolu votre problème? –