Ceci est un matériel pour les sessions d'étude. J'expliquerai en suivant le tutoriel de django1.8. https://docs.djangoproject.com/en/1.8/intro/tutorial02/
La version 1.4 étant la dernière version du document officiel japonais, il existe quelques différences, mais le flux général est le même, c'est donc une bonne idée de le lire. http://django-docs-ja.readthedocs.org/en/latest/intro/tutorial02.html
Tutoriel 1 → Résumé du didacticiel
Cette fois, je vais vous expliquer le site de gestion de django. Un site de gestion est préparé en standard dans django, et les utilisateurs disposant des droits du personnel peuvent utiliser le modèle à partir d'ici. Modèles ajoutés par moi-même, y compris le modèle utilisateur que django a en standard (Par exemple, les deux modèles de vote créés dans le didacticiel) créent également semi-automatiquement une page comme celle-là.
S'il s'agit d'une application Web qui ne gère que des données telles que l'enregistrement de données, l'affichage d'une liste et la recherche Vous pouvez facilement le créer simplement en personnalisant cette page.
Document → https://docs.djangoproject.com/en/1.8/intro/tutorial02/#creating-an-admin-user Source → balise ʻadd_app_4_database_migration` (pas de changement)
Un utilisateur disposant de l'autorité du personnel est tenu de toucher le site de gestion.
Un super utilisateur pour django est créé à l'aide de la commande createuperuser
.
$ ./manage.py createsuperuser
Username (leave blank to use 'shimomura'): admin
Email address:
Password:
Password (again):
Superuser created successfully.
Lorsque vous exécutez la commande createuperuser, vous serez invité à entrer votre nom d'utilisateur, votre adresse e-mail et votre mot de passe. Si le nom d'utilisateur est par défaut, le nom d'utilisateur du PC sera entré tel quel. Cette fois, c'est ʻadmin`. L'e-mail peut être vide. Pour Mot de passe, entrez deux fois la même chaîne de caractères.
Enfin, lorsque le message "Superuser créé avec succès" apparaît, le processus est terminé.
Document → https://docs.djangoproject.com/en/1.8/intro/tutorial02/#start-the-development-server
Source → Balise ʻadd_app_4_database_migration→
954ba86`
Après avoir créé un super utilisateur, démarrez le serveur de test et accédez au site de gestion.
Pour démarrer le serveur, utilisez la commande 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.
Dans cet état avec un navigateur http://localhost:8000/admin/ Lorsque vous y accédez, vous devriez être redirigé vers l'écran de connexion comme indiqué ci-dessous.
Si vous parvenez à vous connecter avec succès, l'écran suivant s'affiche. Par défaut, seuls les modèles d'authentification (Groupes et Utilisateurs) sont affichés.
--
Je pense que j'ai pu afficher le site en toute sécurité, mais comme vous pouvez le voir, le site de gestion est en anglais par défaut. Je n'aime pas l'anglais, alors utilisons le japonais.
Bien sûr, django prend en charge plusieurs langues.
La langue à afficher est définie près de la ligne 103 de settings.py.
La valeur par défaut est ʻen-us, alors changeons cela en
ja`.
settings.py_Près de la ligne 103
# LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'ja'
# TIME_ZONE = 'UTC'
TIME_ZONE = 'Asia/Tokyo'
Une fois le problème résolu, essayez à nouveau d'accéder au site de gestion. http://localhost:8000/admin/
Il semble qu'il ait été traduit avec succès en japonais.
Document → https://docs.djangoproject.com/en/1.8/intro/tutorial02/#make-the-poll-app-modifiable-in-the-admin
Source → 954ba86
→ 35ec2c6
Maintenant que vous pouvez voir le site de gestion en toute sécurité, affichons également votre propre modèle. Les paramètres et la personnalisation du modèle à afficher sur le site de gestion sont décrits dans ʻapp / admin.py`.
Cette fois, nous ajouterons le modèle Question de l'application sondages en suivant le tutoriel.
polls/admin.py
from django.contrib import admin
from .models import Question
admin.site.register(Question)
Il devrait maintenant être visible sur le site d'administration.
Essayons également d'ajouter des données.
Lorsque vous appuyez sur le lien d'ajout, le formulaire d'ajout de données s'affiche.
Étant donné que le modèle Question avait deux champs, question_text
et pub_date
,
Deux éléments sont également affichés sur l'affichage du formulaire.
Lorsque vous vous inscrivez, vous devriez avoir une donnée appelée "Objet Question". Si vous vous inscrivez à nouveau, deux «objets Question» seront affichés.
Puisque nous ne savons pas de quel type de données il s'agit, modifions la chaîne de caractères qui représente l'objet.
Pour le changer, remplacez simplement la méthode __str__
( __unicode__
dans le cas de la série python2) du modèle que vous souhaitez modifier.
Cette fois, nous le modifierons pour que le contenu de la question soit affiché.
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
Si vous souhaitez modifier la chaîne de caractères qui représente le modèle lui-même (Question dans ce cas), définissez-la dans la classe Meta </ b>.
Le nom qui représente le modèle avec verbose_name
,
Vous pouvez définir un nom qui représente la forme plurielle du modèle avec verbose_name_plural
.
polls/models.py
class Question(models.Model):
class Meta:
verbose_name = 'Question'
verbose_name_plural = 'Forme multiple de question'
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
def __str__(self):
return self.question_text
Assurez-vous que "Questions" et "Questions" sont remplacés par "questions" et "questions plurielles".
Par défaut, l'ordre d'enregistrement est décroissant (les plus récents apparaissent), mais modifions cela pour qu'il soit arrangé à partir du plus récent à la date de publication (pub_date).
Les changements sont définis dans la propriété ʻorderingde la classe Meta du modèle. La valeur du paramètre est le nom du champ, et si vous souhaitez l'utiliser dans l'ordre décroissant, ajoutez
-` au début.
class Question(models.Model):
class Meta:
verbose_name = 'Question'
verbose_name_plural = 'Forme multiple de question'
ordering = ['-pub_date']
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
def __str__(self):
return self.question_text
Commencez par organiser dans l'ordre du contenu des questions, et si elles sont identiques, si vous souhaitez organiser dans l'ordre décroissant de la date de publication
ordering = ['question_text', '-pubdate']
Écrivez comme suit.
Veuillez vérifier qu'ils sont réellement réorganisés.
--
Il est également possible de personnaliser le formulaire lui-même lors de l'ajout. (J'expliquerai dans la section suivante ci-dessous) Dans le didacticiel d'origine, lors de l'ajout d'un objet Question après cela J'explique comment changer la conception du formulaire, mais je vais omettre l'explication cette fois. Si vous êtes intéressé, veuillez consulter le tutoriel du chef de famille. https://docs.djangoproject.com/en/1.8/intro/tutorial02/#customize-the-admin-form
Documents → https://docs.djangoproject.com/en/1.8/intro/tutorial02/#adding-related-objects
(Expliqué depuis le milieu avec ʻAjout d'un élément en ligne``)
Source → 35ec2c6
→ 84f1086
Nous ajouterons un autre modèle, Choice
, dont dispose l'application de sondage.
Ce modèle a une clé étrangère (relation avec le modèle Question), à quoi ressemblera-t-il?
Tout d'abord, éditez polls / admin.py
et ajoutez Choice pour l'afficher dans admin.
polls/admin.py
from django.contrib import admin
from .models import Question
from .models import Choice #Ajouter ici
admin.site.register(Question)
admin.site.register(Choice) #Ajouter ici
Il semble qu'il a été ajouté en toute sécurité. Le modèle Choice n'a pas de paramètres Meta, il sort donc tel quel. Ensuite, nous examinerons l'écran supplémentaire.
Dans le cas du champ ForeignKey, il est affiché sous forme de liste de sélection dans le formulaire comme celui-ci. Vous pouvez également créer un nouvel objet Question en appuyant sur le bouton vert plus sur le côté droit.
Le contenu est comme ça, et l'objet du modèle Question créé précédemment est inclus. Si vous n'avez pas défini
__str__
, les trois seront affichés commeObjet Question
et vous serez triste. Bien sûr, vous pouvez personnaliser librement ce que vous souhaitez offrir à cette option. L'ordre est trié par «ordre» défini dans la classe Meta du modèle.
De cette façon, simplement enregistrer le modèle avec la fonction ʻadmin.site.register` fera diverses choses automatiquement, mais Avec une petite modification, vous pouvez personnaliser le contenu du formulaire, afficher la liste, ajouter des éléments de recherche, etc.
Lors de la personnalisation, passez la classe qui décrit le comportement sur le site Admin au deuxième argument de la fonction ʻadmin.site.reigster. Cette classe hérite de la classe ʻadmin.ModelAdmin
et ne remplace que les parties nécessaires par vous-même.
Comme il est difficile de comprendre s'il ne s'agit que de phrases, nous montrerons en fait des exemples de chaque personnalisation.
Documents → https://docs.djangoproject.com/en/1.8/intro/tutorial02/#adding-related-objects
Source → 84f1086
→ ʻe4bacf7`
Dans les exemples jusqu'à présent, si vous souhaitez ajouter des questions et des choix, créez d'abord la question d'origine, puis J'ai dû le sélectionner sur la page supplémentaire de Choix. Il est difficile de sélectionner les questions une par une dans Choice, et il y a une possibilité de faire une erreur dans la sélection.
Le formulaire en ligne est pratique là-bas. Si vous l'utilisez, ce sera l'objet de la relation (question dans ce cas) Vous pouvez créer l'objet cible (Choice dans ce cas) en même temps.
Dans le cas du site d'administration, une classe pour l'affichage d'Inline appelée InlineAdmin est préparée.
Cette fois, nous utiliserons la classe StackedInline
.
Le code source modifié est le suivant.
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)
Ajoutez les définitions de «ChoiceInline» et «QuestionAdmin» au deuxième argument lors de l'enregistrement d'une question. Il est modifié pour passer «QuestionAdmin».
ʻAdmin.StackedInline` est une classe de base pour créer des Inlines au format Stacked. Définissez le modèle cible (Choix dans ce cas) et le nombre d'écrans (extra = 3). Vous pouvez également définir le nombre maximum et déterminer s'il peut ou non être supprimé.
ʻAdmin.ModelAdmin` est une classe permettant de personnaliser le comportement du modèle sur le site de gestion. Cette fois, les inserts sont définis et le comportement lors de l'ajout et de la modification d'objets est modifié.
Si vous changez jusqu'à présent et accédez à nouveau à la page supplémentaire (ou à la page d'édition) de Question sur le site de gestion Vous pouvez voir que vous pouvez modifier les choix en même temps.
Document → https://docs.djangoproject.com/en/1.8/intro/tutorial02/#customize-the-admin-change-list
Source → ʻe4bacf7→
7f5128a`
Maintenant que l'enregistrement et l'édition s'améliorent, personnalisons l'affichage de la liste.
Pour changer l'affichage, définissez list_display dans la classe (QuestionAdmin
) créée en héritant de ʻadmin.ModelAdmin`.
polls/admin.py
...
class QuestionAdmin(admin.ModelAdmin):
inlines = [ChoiceInline]
list_display = ('question_text', 'pub_date')
...
La liste, qui était un paysage meurtrier, est devenue un peu plus vivante. Pour tous les modèles, django ajoutera automatiquement une clé primaire. En passant, ajoutons cela également.
polls/admin.py
...
class QuestionAdmin(admin.ModelAdmin):
inlines = [ChoiceInline]
list_display = ('pk', 'question_text', 'pub_date')
...
C'est un sentiment agréable.
Faisons quelque chose d'un peu spécial, en suivant le tutoriel original. En plus des champs, list_display peut être défini sur une méthode sans argument.
Ajoutez une méthode was_published_recently
au modèle Question pour voir si la question a été publiée dans la journée.
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)
...
Ensuite, ajoutez cette méthode à list_display.
polls/admin.py
...
class QuestionAdmin(admin.ModelAdmin):
inlines = [ChoiceInline]
list_display = ('pk', 'question_text', 'pub_date', 'was_published_recently')
...
Vous pouvez le voir correctement. Il peut être intéressant de créer une méthode qui renvoie le nombre de choix associés à la question.
Si la cible de list_display est une méthode, vous pouvez modifier l'affichage et définir les conditions d'ordre en ajoutant des attributs à la méthode.
Définissons ʻadmin_order_field,
boolean,
short_description` en suivant le tutoriel original.
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?'
...
Ça fait du bien.
ʻAdmin_order_fielddéfinit le champ à regarder lors du tri. Dans cet exemple, ils sont triés par le champ
pub_date`.
En définissant cet attribut, vous pouvez cliquer sur l'en-tête du tableau et le trier.
Enfin, ajoutons un filtre et une recherche. Définissez simplement les propriétés dans QuestionAdmin comme dans l'exemple.
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']
...
Vous pouvez facilement ajouter des filtres et des recherches comme celui-ci.
Recommended Posts