[PYTHON] Django Tutorial Zusammenfassung für Anfänger von Anfängern ⑦ (Customize Admin)

Einführung

Dieser Artikel ist eine Reihe, die das offizielle Django-Tutorial weiterentwickelt. Dieses Mal fahren wir mit dem 4. Artikel "Erstellen der ersten Django-App, Teil 7" fort. Dies ist die letzte Folge.

Zusammenfassung des Django-Tutorials für Anfänger von Anfängern ① (Projekterstellung ~) Django-Tutorial-Zusammenfassung für Anfänger von Anfängern Model (Model, Admin) Zusammenfassung des Django-Tutorials für Anfänger von Anfängern ③ (Anzeigen) Zusammenfassung des Django-Tutorials für Anfänger von Anfängern ④ (generische Ansicht) Django Tutorial Zusammenfassung für Anfänger von Anfängern ⑤ (Test) Django Tutorial Zusammenfassung für Anfänger von Anfängern ⑥ (statische Datei) Zusammenfassung der Django-Tutorials für Anfänger durch Anfänger ⑦ (Admin anpassen)

Erstellen Ihrer ersten Django-App, Teil 7

https://docs.djangoproject.com/ja/3.0/intro/tutorial07/

Diesmal waren die folgenden Artikel durchweg sehr hilfreich! Django Admin Was Sie tun möchten Reverse (Basic)

Admin-Formular anpassen

Zusammenfassung der Django-Tutorials für Anfänger von Anfängern (Model, Admin) Ich habe das Fragenmodell bei "admin.site.register (Frage)" registriert und das Objekt auf der Admin-Seite angezeigt.

Wir verwenden derzeit die Standard-Admin-Seite, daher werden wir dies ändern.

polls/admin.py


from django.contrib import admin

from .models import Question


class QuestionAdmin(admin.ModelAdmin):
    fields = ['pub_date', 'question_text']

admin.site.register(Question, QuestionAdmin)

Dies ist eine Änderung in der Reihenfolge der Felder im Bearbeitungsformular. Um die Administrationsseite auf diese Weise zu bearbeiten, erstellen Sie eine Klasse für jedes Modell und übergeben Sie sie als zweites Argument an "admin.site.register ()".

Sie können das Formular auch teilen, indem Sie wie unten gezeigt "Feldsatz" angeben.

polls/admin.py


from django.contrib import admin

from .models import Question


class QuestionAdmin(admin.ModelAdmin):
    fieldsets = [
        (None,               {'fields': ['question_text']}),
        ('Date information', {'fields': ['pub_date']}),
    ]

admin.site.register(Question, QuestionAdmin)

image.png

Fügen Sie relationale Objekte hinzu

Die derzeit mit der Frage verknüpften Auswahlmöglichkeiten sind nicht mehr verwaltbar. Registrieren Sie das Modell vorerst wie in der ersten Frage.

from django.contrib import admin

from .models import Choice, Question
# ...
admin.site.register(Choice)

Jetzt können Sie es wie eine Frage behandeln.

image.png

Fragen können auch richtig ausgewählt werden. Drücken Sie +, um zur neuen Fragenseite zu springen. Wenn die neu erstellte Frage dort erstellt wird, wird sie auf die Seite Auswahl erstellen der ausgewählten Auswahl umgeleitet. (Viel Hightech)

Von hier aus ändern wir es so, dass die Auswahl gleichzeitig beim Erstellen der Quesition erstellt werden kann.

Löschen Sie "admin.site.register ()" für Choice und ändern Sie es wie folgt:

polls/admin.py


from django.contrib import admin

from .models import Choice, Question


class ChoiceInline(admin.StackedInline):
    model = Choice
    extra = 3


class QuestionAdmin(admin.ModelAdmin):
    fieldsets = [
        (None,               {'fields': ['question_text']}),
        ('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}),
    ]
    inlines = [ChoiceInline]

admin.site.register(Question, QuestionAdmin)

Sie können mit verschiedenen Modellen arbeiten, indem Sie "admin.StackedInline" verwenden.

Dies führt zu: image.png

Es gibt auch einen Link "Weitere Auswahl hinzufügen" am unteren Rand des Formulars. Das ist auch Hightech.

Sie können auch "TabularInline" anstelle von "StackedInline" verwenden, um mit anderen Modellen zu arbeiten. Wenn Sie es verwenden, wird es wie folgt sein. image.png

Passen Sie die Seite mit der Änderungsliste auf der Administrationsseite an

Eine Änderungslistenseite ist eine solche Seite. スクリーンショット 2020-01-06 19.25.14.png Standardmäßig soll das str des Objekts angezeigt werden.

Setzen Sie list_display, um dieser Liste eine weitere Spalte hinzuzufügen.

polls/admin.py


class QuestionAdmin(admin.ModelAdmin):
    # ...
    list_display = ('question_text', 'pub_date', 'was_published_recently')

Zusätzlich zu den Feldnamen können Sie wie oben beschrieben Methoden für das Modell angeben.

image.png Dadurch erhalten Sie eine Liste wie diese.

Wenn Sie auf die Spaltenüberschrift (den Teil mit der Bezeichnung QUESTION TEXT) drücken, wird diese entsprechend sortiert. Das ist auch Hightech.

Außerdem ist der Teil "was_published_recently" eine Methode, daher entspricht er dieser nicht. Dies ist in polls / models.py behoben.

polls/models.py


class Question(models.Model):
    # ...
    def was_published_recently(self):
        now = timezone.now()
        return now - datetime.timedelta(days=1) <= self.pub_date <= now
    was_published_recently.admin_order_field = 'pub_date'
    was_published_recently.boolean = True
    was_published_recently.short_description = 'Published recently?'

Stellen Sie außerdem die Filter- / Suchfunktion in dieser Liste ein. Verwenden Sie list_filter bzw. search_fields.

polls/admin.py


list_filter = ['pub_date']
search_fields = ['question_text']

Passen Sie das Erscheinungsbild Ihrer Admin-Site an

Bisher haben wir die Funktionalität der Admin-Seite hinzugefügt. Als nächstes werden wir das Design ändern.

Erstellen Sie ein Vorlagenverzeichnis in Ihrem Projektverzeichnis. (Das Verzeichnis, in dem sich manage.py usw. befindet)

Bearbeiten Sie mysite / settings.py.

mysite/settings.py


TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

DIRS ist eine Liste von Verzeichnissen im Dateisystem, die Django beim Laden von Vorlagen überprüft. Es ist wie ein Suchpfad.

Suchen Sie das Django-Administratorvorlagenverzeichnis (django / contrib / admin / templates) und kopieren Sie die Vorlage "admin / base_site.html" in das neu erstellte Verzeichnis.

Sie können den Speicherort der Django-Quelldatei mit dem folgenden Befehl ermitteln.

$ python -c "import django; print(django.__path__)"

admin/base_site.html


{% block branding %}
<h1 id="site-name"><a href="{% url 'admin:index' %}">Polls Administration</a></h1>
{% endblock %}

Sie können die Vorlage auf diese Weise überschreiben. Ich habe den Site-Header als Beispiel geändert, aber Sie können dasselbe mit dem Attribut django.contrib.admin.AdminSite.site_header tun.

Am Ende

Sie haben jetzt alle offiziellen Tutorials von Django abgeschlossen! Natürlich gab es einige Ähnlichkeiten mit Rails und Phoenix, aber die Spezifikationen waren sehr unterschiedlich und ich habe es genossen zu lernen!

Hab ein gutes Django-Leben!

S. Wenn Sie Fehler oder Missverständnisse in dieser Serie finden, stellen Sie bitte eine Bearbeitungsanfrage oder einen sanften Kommentar ...

Recommended Posts

Django Tutorial Zusammenfassung für Anfänger von Anfängern ⑦ (Customize Admin)
Django Tutorial Zusammenfassung für Anfänger von Anfängern ② (Model, Admin)
Django Tutorial Zusammenfassung für Anfänger von Anfängern ③ (Anzeigen)
Django Tutorial Zusammenfassung für Anfänger von Anfängern ⑤ (Test)
Django Tutorial Zusammenfassung für Anfänger von Anfängern ⑥ (statische Datei)
Django Tutorial Zusammenfassung für Anfänger von Anfängern ① (Projekterstellung ~)
Django Tutorial Zusammenfassung für Anfänger von Anfängern ④ (Generic View)
Zusammenfassung des Python Django-Tutorials
[Erklärung für Anfänger] TensorFlow-Tutorial MNIST (für Anfänger)
Zusammenfassung des maschinellen Lernens von Python-Anfängern
[Für Anfänger] Django -Entwicklungsumgebung Bau-
Was ist Schaben? [Zusammenfassung für Anfänger]
TensorFlow Tutorial MNIST Für ML-Anfänger
Django Girls Tutorial Zusammenfassung Erste Hälfte
Pandas Basics Summary Link für Anfänger
[Veraltet] Chainer v1.24.0 Anfänger-Tutorial
TensorFlow Tutorial -MNIST Für ML-Anfänger
[Erklärung für Anfänger] TensorFlow-Tutorial Deep MNIST
Django Zusammenfassung
[Linux-Befehlsübersicht] Befehlsliste [Muss für Anfänger]
[Django] Möchten Sie die Administrationsseite anpassen?
Django Zusammenfassung
Linux-Betrieb für Anfänger Grundlegende Befehlsübersicht
Ein Lehrbuch für Anfänger von Python-Anfängern
Eine Einführung in die objektorientierte Programmierung für Anfänger von Anfängern
Über Nims Funktionen höherer Ordnung für Nim-Anfänger, geschrieben von Nim-Anfängern
Durchführen des TensorFlow MNIST für ML-Anfänger-Tutorials
Python Django Tutorial (5)
Python Django Tutorial (2)
Zusammenfassung des Python-Tutorials
Internationalisierungsunterstützung mit Django 1.9
Django Tutorial Memo
Python Django Tutorial (8)
Python Django Tutorial (6)
Starten Sie das Django Tutorial 1
Django Filter Zusammenfassung
Python Django Tutorial (7)
Python Django Tutorial (1)
Python Django Tutorial Tutorial
Python Django Tutorial (3)
Python Django Tutorial (4)
[Übersetzung] NumPy Official Tutorial "NumPy: die absoluten Grundlagen für Anfänger"
Python-Anfänger versucht, dem Administrator von Django eine grundlegende Authentifizierung hinzuzufügen
Ich habe das MNIST-Tutorial von tensorflow für Anfänger ausprobiert.
Zusammenfassung der Vorverarbeitungsmethoden für Python-Anfänger (Pandas-Datenrahmen)
[Linux] Grundlagen der Berechtigungseinstellung von chmod für Anfänger
[Für Anfänger] Django Häufig verwendete Befehle und Referenzsammlung