Dies ist ein Material für Lernsitzungen. Ich werde es erklären, während ich dem Tutorial von django1.8 folge. https://docs.djangoproject.com/en/1.8/intro/tutorial02/
Da Version 1.4 die neueste Version des offiziellen japanischen Dokuments ist, gibt es einige Unterschiede, aber der allgemeine Ablauf ist der gleiche. Es ist daher eine gute Idee, ihn zu lesen. http://django-docs-ja.readthedocs.org/en/latest/intro/tutorial02.html
Tutorial 1 → Tutorial-Zusammenfassung
Dieses Mal werde ich die Management-Site von Django erläutern. In Django wird standardmäßig eine Verwaltungssite erstellt, und Benutzer mit Personalautorität können das Modell von hier aus bedienen. Von mir hinzugefügte Modelle, einschließlich des Benutzermodells, das Django standardmäßig hat (Zum Beispiel die beiden im Lernprogramm erstellten Abstimmungsmodelle) Erstellen Sie eine solche Seite auch halbautomatisch.
Wenn es sich um eine Webanwendung handelt, die nur Daten wie das Registrieren von Daten, das Anzeigen einer Liste und das Suchen verarbeitet Sie können es einfach erstellen, indem Sie diese Seite anpassen.
Dokument → https://docs.djangoproject.com/de/1.8/intro/tutorial02/#creating-an-admin-user
Quelle → add_app_4_database_migration
Tag (keine Änderung)
Ein Benutzer mit Personalberechtigung muss die Verwaltungssite berühren.
Ein Superuser für Django wird mit dem Befehl createuperuser
erstellt.
$ ./manage.py createsuperuser
Username (leave blank to use 'shimomura'): admin
Email address:
Password:
Password (again):
Superuser created successfully.
Wenn Sie den Befehl "createuperuser" ausführen, werden Sie aufgefordert, Ihren Benutzernamen, Ihre E-Mail-Adresse und Ihr Kennwort einzugeben. Wenn der Benutzername Standard ist, wird der PC-Benutzername unverändert eingegeben. Diesmal ist es "admin". E-Mail kann leer sein. Geben Sie als Passwort dieselbe Zeichenfolge zweimal ein.
Wenn schließlich "Superuser erfolgreich erstellt" angezeigt wird, ist der Vorgang abgeschlossen.
Dokument → https://docs.djangoproject.com/de/1.8/intro/tutorial02/#start-the-development-server
Quelle → add_app_4_database_migration
Tag → 954ba86
Starten Sie nach dem Erstellen eines Superusers den Testserver und greifen Sie auf die Verwaltungssite zu.
Verwenden Sie zum Starten des Servers den Befehl runserver
.
$ ./manage.py runserver
Performing system checks...
System check identified no issues (0 silenced).
November 05, 2015 - 07:37:15
Django version 1.8.5, using settings 'tutorial.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
In diesem Zustand mit einem Browser http://localhost:8000/admin/ Wenn Sie darauf zugreifen, sollten Sie wie unten gezeigt zum Anmeldebildschirm weitergeleitet werden.
Wenn Sie sich erfolgreich anmelden können, wird der folgende Bildschirm angezeigt. Standardmäßig werden nur die Authentifizierungsmodelle (Gruppen und Benutzer) angezeigt.
--
Ich glaube, ich konnte die Site sicher anzeigen, aber wie Sie sehen können, ist die Management-Site standardmäßig in Englisch. Ich mag kein Englisch, also lasst uns Japanisch verwenden.
Natürlich unterstützt Django mehrere Sprachen. Die anzuzeigende Sprache wird in der Nähe der Zeile 103 von settings.py definiert. Der Standardwert ist "en-us", also ändern wir dies in "ja".
settings.py_In der Nähe der Linie 103
# LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'ja'
# TIME_ZONE = 'UTC'
TIME_ZONE = 'Asia/Tokyo'
Versuchen Sie nach dem Beheben erneut, auf die Verwaltungssite zuzugreifen. http://localhost:8000/admin/
Es scheint, dass es erfolgreich ins Japanische übersetzt wurde.
Dokument → https://docs.djangoproject.com/de/1.8/intro/tutorial02/#make-the-poll-app-modizable-in-the-admin
Quelle → 954ba86
→ 35ec2c6
Nachdem Sie die Verwaltungssite jetzt sicher sehen können, zeigen wir auch Ihr eigenes Modell an.
Die Einstellungen und Anpassungen des Modells, das auf der Verwaltungssite angezeigt werden soll, sind in app / admin.py
beschrieben.
Dieses Mal werden wir das Fragenmodell der Umfrage-App nach dem Tutorial hinzufügen.
polls/admin.py
from django.contrib import admin
from .models import Question
admin.site.register(Question)
Es sollte jetzt auf der Admin-Site sichtbar sein.
Versuchen wir auch, Daten hinzuzufügen. Wenn Sie auf den Link Hinzufügen klicken, wird das Formular zum Hinzufügen von Daten angezeigt. Da das Fragenmodell zwei Felder hatte, "question_text" und "pub_date", Zwei Elemente werden auch in der Formularanzeige angezeigt.
Wenn Sie sich registrieren, sollten Sie über Daten mit dem Namen "Frageobjekt" verfügen. Wenn Sie sich erneut registrieren, werden zwei "Frageobjekte" angezeigt.
Da wir nicht wissen, um welche Art von Daten es sich handelt, ändern wir die Zeichenfolge, die das Objekt darstellt. Um dies zu ändern, überschreiben Sie einfach die Methode str (unicode im Fall der Python2-Serie) des Modells, das Sie ändern möchten. Dieses Mal werden wir es so ändern, dass der Inhalt der Frage angezeigt wird.
polls/models.py
class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
def __str__(self):
return self.question_text
Wenn Sie die Zeichenfolge ändern möchten, die das Modell selbst darstellt (in diesem Fall Frage), legen Sie sie in der Klasse Meta </ b> fest.
Der Name, der das Modell mit verbose_name
darstellt,
Sie können mit verbose_name_plural
einen Namen festlegen, der die Pluralform des Modells darstellt.
polls/models.py
class Question(models.Model):
class Meta:
verbose_name = 'Frage'
verbose_name_plural = 'Multiple Form der Frage'
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
def __str__(self):
return self.question_text
Stellen Sie sicher, dass "Fragen", "Fragen" in "Fragen", "Fragenplural" geändert werden.
Standardmäßig ist die Reihenfolge der Registrierung absteigend (die neuesten werden angezeigt). Ändern Sie dies jedoch so, dass sie am Veröffentlichungsdatum (pub_date) von der neuesten Reihenfolge abweicht.
Änderungen werden in der Eigenschaft "ordering" der Meta-Klasse des Modells festgelegt.
Der Einstellungswert ist der Feldname. Wenn Sie ihn in absteigender Reihenfolge wünschen, fügen Sie am Anfang -
hinzu.
class Question(models.Model):
class Meta:
verbose_name = 'Frage'
verbose_name_plural = 'Multiple Form der Frage'
ordering = ['-pub_date']
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
def __str__(self):
return self.question_text
Ordnen Sie zunächst in der Reihenfolge des Frageninhalts an, und wenn diese identisch sind, wenn Sie in absteigender Reihenfolge des Veröffentlichungsdatums anordnen möchten
ordering = ['question_text', '-pubdate']
Schreiben Sie wie folgt.
Bitte überprüfen Sie, ob sie tatsächlich neu angeordnet wurden.
--
Es ist auch möglich, das Formular selbst beim Hinzufügen anzupassen. (Ich werde im nächsten Abschnitt unten erklären) Im ursprünglichen Tutorial, wenn Sie danach ein Frageobjekt hinzufügen Ich erkläre, wie das Design des Formulars geändert werden kann, aber diesmal werde ich die Erklärung weglassen. Wenn Sie interessiert sind, lesen Sie bitte das Tutorial der Hauptfamilie. https://docs.djangoproject.com/en/1.8/intro/tutorial02/#customize-the-admin-form
Dokumente → https://docs.djangoproject.com/de/1.8/intro/tutorial02/#adding-related-objects
(Erklärt in "Hinzufügen eines Inline-Elements" von der Mitte aus)
Quelle → 35ec2c6
→ 84f1086
Wir werden ein weiteres Modell hinzufügen, "Choice", das die Umfrage-App hat. Dieses Modell hat einen Fremdschlüssel (Beziehung zum Fragenmodell). Wie sieht es aus?
Bearbeiten Sie zuerst polls / admin.py
und fügen Sie Choice hinzu, um es in admin anzuzeigen.
polls/admin.py
from django.contrib import admin
from .models import Question
from .models import Choice #Hier hinzufügen
admin.site.register(Question)
admin.site.register(Choice) #Hier hinzufügen
Es scheint, dass es sicher hinzugefügt wurde. Das Choice-Modell verfügt nicht über Meta-Einstellungen und wird daher unverändert angezeigt. Als nächstes schauen wir uns den zusätzlichen Bildschirm an.
Im Falle eines ForeignKey-Felds wird es in diesem Formular als Auswahlliste angezeigt. Sie können auch ein neues Frageobjekt erstellen, indem Sie das grüne Pluszeichen auf der rechten Seite drücken.
Der Inhalt ist wie folgt und das Objekt des zuvor erstellten Fragenmodells ist enthalten. Wenn
__str__
nicht gesetzt ist, werden alle drei alsFrageobjekt
angezeigt und es wird traurig. Natürlich können Sie diese Option frei anpassen, was Sie anbieten möchten. Die Reihenfolge wird nach der in der Meta-Klasse des Modells festgelegten Reihenfolge sortiert.
Auf diese Weise führt das Registrieren des Modells mit der Funktion "admin.site.register" automatisch zu verschiedenen Aktionen Mit einer kleinen Änderung können Sie den Inhalt des Formulars anpassen, die Liste anzeigen, Suchelemente hinzufügen usw.
Übergeben Sie beim Anpassen die Klasse, die das Verhalten auf der Admin-Site beschreibt, an das zweite Argument der Funktion admin.site.reigster
.
Diese Klasse erbt die Klasse "admin.ModelAdmin" und überschreibt nur die erforderlichen Teile selbst.
Da es schwer zu verstehen ist, wenn es sich nur um Sätze handelt, werden wir tatsächlich Beispiele für jede Anpassung zeigen.
Dokumente → https://docs.djangoproject.com/de/1.8/intro/tutorial02/#adding-related-objects
Quelle → 84f1086
→ e4bacf7
Wenn Sie in den bisherigen Beispielen Fragen und Auswahlmöglichkeiten hinzufügen möchten, erstellen Sie zuerst die ursprüngliche Frage und dann Ich musste es auf der zusätzlichen Seite der Wahl auswählen. Es ist schwierig, Frage einzeln in Auswahl auszuwählen, und es besteht die Möglichkeit, dass bei der Auswahl ein Fehler gemacht wird.
Inline-Formular ist dort bequem. Wenn Sie dies verwenden, ist es das Objekt der Beziehung (Frage in diesem Fall) Sie können das Zielobjekt (in diesem Fall Auswahl) gleichzeitig erstellen.
Im Fall der Admin-Site wird eine Klasse zum Anzeigen von Inline mit dem Namen InlineAdmin vorbereitet.
Dieses Mal werden wir die StackedInline
Klasse verwenden.
Der geänderte Quellcode lautet wie folgt.
polls/admin.py
from django.contrib import admin
from .models import Question
from .models import Choice
class ChoiceInline(admin.StackedInline):
model = Choice
extra = 3
class QuestionAdmin(admin.ModelAdmin):
inlines = [ChoiceInline]
admin.site.register(Question, QuestionAdmin)
admin.site.register(Choice)
Fügen Sie die Definitionen von "ChoiceInline" und "QuestionAdmin" zum zweiten Argument hinzu, wenn Sie eine Frage registrieren. Es wurde geändert, um "QuestionAdmin" zu bestehen.
admin.StackedInline
ist eine Basisklasse zum Erstellen von Inlines im gestapelten Format.
Stellen Sie das Zielmodell (in diesem Fall Auswahl) und die Anzahl der Anzeigen (extra = 3) ein.
Sie können auch die maximale Anzahl festlegen und festlegen, ob diese gelöscht werden soll oder nicht.
admin.ModelAdmin
ist eine Klasse zum Anpassen des Verhaltens des Modells auf der Verwaltungssite.
Dieses Mal werden Inlines festgelegt und das Verhalten beim Hinzufügen und Bearbeiten von Objekten wird geändert.
Wenn Sie sich bisher geändert haben, wechseln Sie erneut zur Seite zum Hinzufügen von Fragen (oder zum Bearbeiten von Seiten) auf der Verwaltungssite Sie können sehen, dass Sie Auswahlmöglichkeiten gleichzeitig bearbeiten können.
Dokument → https://docs.djangoproject.com/de/1.8/intro/tutorial02/#customize-the-admin-change-list
Quelle → e4bacf7
→ 7f5128a
Jetzt, da Registrierung und Bearbeitung besser werden, passen wir die Listenanzeige an.
Um die Anzeige zu ändern, setzen Sie list_display in der Klasse (QuestionAdmin
), die durch das Erben von admin.ModelAdmin
erstellt wurde.
polls/admin.py
...
class QuestionAdmin(admin.ModelAdmin):
inlines = [ChoiceInline]
list_display = ('question_text', 'pub_date')
...
Die Liste, die eine mörderische Landschaft war, ist etwas lebendiger geworden. Für alle Modelle fügt django automatisch einen Primärschlüssel hinzu. Als Randnotiz fügen wir das ebenfalls hinzu.
polls/admin.py
...
class QuestionAdmin(admin.ModelAdmin):
inlines = [ChoiceInline]
list_display = ('pk', 'question_text', 'pub_date')
...
Es ist ein gutes Gefühl.
Lassen Sie uns nach dem ursprünglichen Tutorial etwas Besonderes tun. Zusätzlich zu Feldern kann list_display auf eine Methode ohne Argumente gesetzt werden.
Fügen Sie dem Fragenmodell eine was_published_recently
-Methode hinzu, um festzustellen, ob die Frage innerhalb eines Tages veröffentlicht wurde.
polls/models.py
import datetime
from django.db import models
from django.utils import timezone
class Question(models.Model):
...
def was_published_recently(self):
return self.pub_date >= timezone.now() - datetime.timedelta(days=1)
...
Fügen Sie als Nächstes diese Methode zu list_display hinzu.
polls/admin.py
...
class QuestionAdmin(admin.ModelAdmin):
inlines = [ChoiceInline]
list_display = ('pk', 'question_text', 'pub_date', 'was_published_recently')
...
Sie können es richtig sehen. Es kann interessant sein, eine Methode zu erstellen, die die Anzahl der mit der Frage verknüpften Auswahlmöglichkeiten zurückgibt.
Wenn das Ziel von list_display eine Methode ist, können Sie die Anzeige ändern und die Auftragsbedingungen festlegen, indem Sie der Methode Attribute hinzufügen. Setzen wir "admin_order_field", "boolean" und "short_description", indem wir dem ursprünglichen Tutorial folgen.
polls/models.py
...
def was_published_recently(self):
return self.pub_date >= timezone.now() - datetime.timedelta(days=1)
was_published_recently.admin_order_field = 'pub_date'
was_published_recently.boolean = True
was_published_recently.short_description = 'Published recently?'
...
Es fühlt sich sehr gut an.
admin_order_field
legt fest, welches Feld beim Sortieren betrachtet werden soll.
In diesem Beispiel werden sie nach dem Feld "pub_date" sortiert.
Durch Festlegen dieses Attributs können Sie auf die Kopfzeile der Tabelle klicken und diese sortieren.
Zum Schluss fügen wir einen Filter und eine Suche hinzu. Legen Sie einfach die Eigenschaften in QuestionAdmin wie im Beispiel fest.
polls/admin.py
...
class QuestionAdmin(admin.ModelAdmin):
inlines = [ChoiceInline]
list_display = ('pk', 'question_text', 'pub_date', 'was_published_recently')
list_filter = ['pub_date']
search_fields = ['question_text']
...
Sie können einfach Filter und Suchvorgänge wie diesen hinzufügen.
Recommended Posts