2016-03-30 6 views
0

Was ich versuche zu archivieren, hat dynamische Informationen über Modelle, wie die Anzahl, auf der Standard-Admin-Ansichtsseite, wo alle registrierten Modelle aufgeführt sind.Django dynamische Namen Werte in Modellübersicht auf Admin-Site

ich es jetzt in eine extrem hackish Weise tun, wie:

class x(object): 
    def __unicode__(self, *args, **kwargs): 
     return u"Items (%i items)" % SteamItem.objects.count() 
class Item(models.Model) 
    ... 
    class Meta: 
     verbose_name_plural = x() 

Gibt es eine Möglichkeit, das gleiche in einer schöneren Art und Weise zu tun, ohne die Admin-Vorlage bearbeiten zu müssen?
Wenn das Bearbeiten der Admin-Vorlage der einzige Weg ist, würde ich einige Hinweise schätzen, wo ich meine Suche starten soll.

Antwort

1

Introspecting der django admin code Ich fand heraus, dass die Modellklasse leider nicht an den Vorlagenkontext übergeben wird - so können Sie nicht leicht für Objektanzahl abfragen. Was für jedes Modell auf die Vorlage übergeben wird:

model_dict = { 
    'name': capfirst(model._meta.verbose_name_plural), 
    'object_name': model._meta.object_name, 
    'perms': perms, 
} 

Was könnten Sie tun, ist AdminSite._build_app_dict überschreiben die Modellklasse selbst zu schließen, überschreiben die Standard-Index-Vorlage und die nur Abfrage in der Vorlage:

{{ model_class.objects.count }} 

Die Standardvorlage ist admin/index.html, kann aber auf der Basis einer Verwaltungssite konfiguriert werden, wie Sie in der oben genannten Klasse sehen können.