2017-03-16 3 views
0

Ist es möglich, eine Modellbeschreibung oder -beschreibung auf die Listenanzeigeseite eines bestimmten Modells in django-admin zu setzen?Modellbeschreibung in django-admin

Ich spreche über etwas wie wenn Sie auf der Startseite von django-admin auf einen Modellnamen-Link klicken und wenn Sie auf die Listenanzeigeseite dieses Modells gehen. Es wird eine Beschreibung oben auf dem Tisch geschrieben. So etwas wie

„Dieses Modell verwendet wird, alle Konten zu protokollieren, die von unseren schaben geholt werden .... Und so weiter“

So etwas ist es möglich?

+0

Hat eine der folgenden Antworten für Ihren Fall funktioniert? –

+0

Ja es ist, ich habe ein paar Änderungen auf der HTML-Seite vorgenommen. Legen Sie einfach das Templatetag in eine andere Zeile, um sicherzustellen, dass die Schaltflächenausrichtung auf der rechten Seite nicht beeinträchtigt wird. Vielen Dank! –

Antwort

4

Das wäre eine sehr nette Funktion, die im Kern von Djangos Admin hinzugefügt wird. Bis dahin ist hier eine kurze Anleitung zu Ihrer Frage.

Nehmen wir an, dass Sie die docstring jedes Modells, wie diese drucken möchten:

class MyModel(models.Model): 
    """ 
    I wanna get printed in the Admin! 
    """ 

    # model fields here 

Also, wollen Sie es in der change_list Seite zu drucken. Gut.

  1. a Erstellen custom template tag (entweder innerhalb der App oder eine andere App erstellen, die die globalen Template-Tags/Filter halten wird) wie folgt aus:

    from django import template 
    from django.utils.html import mark_safe 
    
    register = template.Library() 
    
    @register.simple_tag() 
    def model_desc(obj): 
        if obj.__doc__: 
         return mark_safe('<p>{}</p>'.format(obj.__doc__)) 
        return '' 
    
  2. nun in Ihrem Projektverzeichnis (wo manage.py Leben), die eine Struktur wie folgt erstellen:

    project/ 
        project/ 
         project stuff here, i.e wsgi.py, settings etc 
        myapp/ 
         myapp stuff here, i.e models, views etc 
        templates/ 
         admin/ 
          change_list.html 
        manage.py 
    
  3. Inside thehinzufügendiese:

    {% extends 'admin/change_list.html' %} 
    {% load yourapp_tags %} 
    
    {# block.super will print the "Select <Model> to change" h1 title #} 
    {# The model_desc template tag is the one you created and prints the docstring of the given model #} 
    {% block content_title %}{{ block.super }}<br>{% model_desc cl.model %}{% endblock %} 
    

Hier ein Screenshot:

Model docstring in Django admin

[UPDATE]: Ich habe seen in the source, dass, wenn keine da ist docstring angegeben, Django für Sie generieren in der folgenden Form: ModelName(model_field_name1, model_field_name2, ...). Wenn Sie das nicht möchten, tun Sie das einfach:

class MyModelWithoutDocstring(models.Model): 

    # model fields here 

MyModelWithoutDocstring.__doc__ = '' # "reset" the __doc__ on this model. 
+0

In Schritt 2 bitten Sie den Benutzer, eine globale change_list.html zu erstellen. Aber jedes Modell wird seine eigene change_list.html haben. Vielleicht möchten Sie das korrigieren. –

+0

Es hängt davon ab, wie modular es sein soll. Ich habe beschlossen, es global für alle Modelle hinzuzufügen, um ihren 'Docstring' auf der' change_list' Seite anzuzeigen. –