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)
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)
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)
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.
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:
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.
Eine Änderungslistenseite ist eine solche Seite.
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.
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']
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.
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