[PYTHON] Django Management Screen Reverse Memo

Listenbildschirm (Listenansicht ändern)

Geben Sie das anzuzeigende Element an

ModelAdmin.list_display = ('hoge',)

Benutzerdefinierte Methoden für Modelle, die Bool zurückgeben, können direkt angegeben werden. Sie können auch "unicode" oder "str" angeben.

ModelAdmin.list_display = ('__str__', 'model_custom_method')

Geben Sie das Element an, um den Link zum Detailbildschirm zu setzen

Standardmäßig hat die ganz links angezeigte einen Link

ModelAdmin.list_display = ('hoge', 'fuga')
ModelAdmin.list_display_links = ('fuga',)

Benutzerdefinierte Werte anzeigen

ModelAdmin.list_display = ('custom_hoge',)

def custom_hoge(self, obj):
    return u'Hoge'
custom_hoge.short_description = u'Anzeigename'
custom_hoge.allow_tags = True  #HTML-Tag-Berechtigung

Für Benutzereingaben wird empfohlen, die Funktion "format_html (" hoge ")" zu verwenden.

Standard-Sortierreihenfolge

ModelAdmin.ordering = ('created_at',)  #Nach Erstellungszeit sortieren

Benutzerdefinierte Aktion (die im ausgewählten Teil oben in der Listenansicht)

ModelAdmin.actions = ['hoge']  #Definieren Sie definierte Funktionen usw.
ModelAdmin.actions_on_top = True  #Wird oben auf der Seite angezeigt
ModelAdmin.actions_on_bottom = True  #Wird unten auf der Seite angezeigt

Benutzerdefinierte Felder sortieren

Da die gesamte Django-Sortierung auf DB-Abfrageebene erfolgt, können Felder, die keine Spalten in der DB enthalten, nicht sortiert werden. Wenn ein benutzerdefiniertes Feld jedoch ein bestimmtes Feld ersetzt, können Sie es sortieren, indem Sie den Feldnamen angeben.

ModelAdmin.list_display = ('number_str',)

#Nummer ist eine Nummer(int)Zurückgeben
def number_str(self, obj):
    return str(obj.number)
number_str.admin_order_field = 'number'

So machen Sie ein benutzerdefiniertes Feld ohne Spalten in der Datenbank mit list_display sortierbar

StackOverflow Django admin: how to sort by one of the custom list_display fields that has no database field

Bildschirm zum Hinzufügen / Ändern

Ich möchte ein bestimmtes Feld aktualisieren

Es gibt zwei Spezifikationsmethoden

fields

  1. Felder können auch den Wert von "ModelAdmin.readonly_fields" angeben, können jedoch nicht bearbeitet werden
  2. Im Gegensatz zu list_display usw. können Sie nur das Feld Model oder ModelAdmin.form angeben
ModelAdmin.fields = ('hoge', 'fuga')  # hoge,Beim Aktualisieren wird nur das Fuga-Feld hinzugefügt und bearbeitet
ModelAdmin.fields = (('hoge', 'fuga'), 'piyo')  # hoge,Fuga wird in derselben Zeile angezeigt

exclude

ModelAdmin.exclude = ('hoge',)  #hoge kann nicht bearbeitet werden

Auf demselben Bildschirm können auch externe Schlüsselwerte hinzugefügt / bearbeitet werden

#Inline-Modell definieren
class SomeForeignKeyModelInline(admin.TabularInline):
    model = SomeForeignKeyModel

#Fügen Sie dem Verwaltungsbildschirm des Modells das Inline-Modell hinzu
class HogeAdmin(admin.ModelAdmin):
    list_display = ('hoge', 'fuga')
    inlines = [SomeForeignKeyModelInline]

Rich Screen mit Feldsatzoption

ModelAdmin.fieldsets = (
    ( 'Name', {'Optionsname': ('Optionswert',)} ),
    (None, {
        'fields': ('hoge', 'fuga')
    }),
)

Benutzerdefiniertes Formular

Standardmäßig generiert "ModelForm" ein Formular für den Verwaltungsbildschirm. Sie können jedoch auch Ihr eigenes benutzerdefiniertes Formular angeben.

ModelAdmin.form = HogeForm

Ich möchte benutzerdefinierte Formularfelder, die nicht im Modell definiert sind, auf dem Verwaltungsbildschirm anzeigen

stackOverflow: django admin - add custom form fields that are not part of the model

Ich möchte ein vorhandenes automatisch generiertes Formular anpassen

Haken Sie mit der Methode get_form ein

ModelAdmin.get_form(request, obj=None, **kwargs)

Verwaltungsbildschirmvorlage überschreiben

Aufbau

Die Originalvorlage des Verwaltungsbildschirms wird in "Contrib / Admin / Template / Admin" gespeichert. Fügen Sie zum Überschreiben "admin /" zu dem von "TEMPLATE_DIR" festgelegten Verzeichnis hinzu.

Fügen Sie das Verwaltungsziel, das Sie überschreiben möchten, im obigen Verzeichnis mit "app_name / modelname /" hinzu. Die Vorlage unter dem App-Namen wird auf alle Modelle unter der App angewendet. Die Vorlagen unter dem Modellnamen werden nur auf den Verwaltungsbildschirm dieses Modells angewendet. Alle Verzeichnisnamen sind in Kleinbuchstaben.

Richtlinien zum Erstellen von Vorlagen

Grundsätzlich ist es effizienter, nur die notwendigen Teile zu überschreiben.

Beispiel: Wenn Sie den Bildschirm mit der Fuga-Modellliste der Hoge-App überschreiben möchten Erstellen Sie "admin / hoge / fuga / change_list.html".

Überschreiben Sie danach den {{% block%} `, den Sie ändern möchten, wie folgt.

{% extend 'admin/change_list.html' %}
{% block 'content' %}
<!--
Formulare und Variablen, die Sie hinzufügen möchten
-->
{{ block.super }}
{% endblock 'content' %}

Hinzufügung von Originalfunktionen

Wenn Sie dem Verwaltungsbildschirm eine eigene Funktion hinzufügen möchten, ein Memo der möglicherweise erforderlichen Arbeit

URL hinzufügen

Fügen Sie eine URL hinzu, die Ihre eigenen Funktionen bietet. Sie müssen die URL anpassen, die der Django-Administratorbildschirm standardmäßig generiert.

Verwenden Sie get_urls.

from django.conf.urls import url
from django.http import HttpResponse
class HogeAdmin(admin.ModelAdmin):
    def get_urls(self):
        urls = super(HogeAdmin, self).get_urls()
        my_urls = [
            url(r'^hoge/$', self.admin_site.admin_view(self.hoge), name='hoge'),
        ]
        return my_urls + urls

    def hoge(self, request):
        return HttpResponse('OK')

self.admin_site.admin_view gibt die Berechtigungsprüfung und never_cache für die Ansicht, die Sie hinzufügen möchten. Grundsätzlich ist es besser, es damit zu verpacken.

Beachten Sie die Reihenfolge von "return my_url + urls". Wenn Sie "my_urls" nicht an die erste Stelle setzen, wird die Standard-URL des Verwaltungsbildschirms priorisiert. Ich kann nicht zur Ansicht meiner eigenen definierten URL gelangen.

Überschreiben Sie den Betrieb des vorhandenen Verwaltungsbildschirms

Überschreiben Sie das Verhalten jeder Ansichtsfunktion

class HogeAdmin(admin.ModelAdmin):
    #Beispiel für das Überschreiben der Funktion des Listenbildschirms
    def changelist_view(self, request, extra_context=None):
        extra_context = extra_context or {}
        extra_context['hoge'] = 'hoge'
        return super(HogeAdmin, self).changelist_view(request, extra_context=extra_context)

Andere

Verwalten Sie dasselbe Modell mit mehreren ModelAdmins

StackOverflow Multiple ModelAdmins/views for same model in Django admin

Recommended Posts

Django Management Screen Reverse Memo
Pandas Reverse Memo
Django-Verwaltungsbildschirm list_filter-Anpassung
Anpassung des Django-Verwaltungsbildschirms Erster Schritt
Reverse Pull Pytest
Django Lernnotiz
Django Tutorial Memo
Entwicklung einer WEB-Anwendung mit Django [Erstellung des Admin-Bildschirms]
DJango Memo: Von Anfang an (Fehlerbildschirmeinstellung)
Heroku-Einsatznotiz (Django)
Sympy Reverse Reference
Django2-Bildschirmadditionsfluss
Django Memo # 1 von Grund auf neu
Luigi Reverse Reference
[Memo] Django-Entwicklungsumgebung
DJango Memo: Von Anfang an (weitere Änderungen am Verwaltungsbildschirm)
Wenn Sie den Benutzernamen und das Passwort des Verwaltungsbildschirms in Django vergessen haben
Django Entwicklungsumgebung Bau Memo
Optimieren der Django-Administrationsseite
Tipps zur Servereinstellung Reverse Pull
Mein umgekehrtes Numpy / Scipy-Memo
Erstellen Sie einen Django-Anmeldebildschirm
[Lernnotiz] Zusammenfassung des Django-Befehls
DJango-Memo: Von Anfang an (über den Verwaltungsbildschirm) mein Suchtpunkt
Die Geschichte, dass "calendar.day_abbr" auf dem Admin-Bildschirm von django nicht aktualisiert werden konnte