Cet article est une série qui fait progresser le didacticiel officiel de Django. Cette fois, nous allons procéder avec le 4ème article "Création de votre première application Django, partie 7". Ceci est le dernier épisode.
Résumé du tutoriel Django pour les débutants par les débutants ① (création de projet ~) Résumé du tutoriel Django pour les débutants par les débutants ② (Modèle, Admin) Résumé du tutoriel Django pour les débutants par les débutants ③ (Afficher) Résumé du didacticiel Django pour les débutants par les débutants ④ (Vue générique) Résumé du tutoriel Django pour les débutants par les débutants ⑤ (test) Résumé du tutoriel Django pour les débutants par les débutants ⑥ (fichier statique) Résumé des tutoriels Django pour les débutants par les débutants ⑦ (Customize Admin)
https://docs.djangoproject.com/ja/3.0/intro/tutorial07/
Cette fois, les articles suivants ont été très utiles tout au long! Django Admin Ce que vous voulez faire Inverser (basique)
Résumé des tutoriels Django pour les débutants par les débutants (Modèle, Admin) J'ai enregistré le modèle Question avec ʻadmin.site.register (Question) `et j'ai affiché l'objet depuis la page Admin.
Nous utilisons actuellement la page d'administration par défaut, nous allons donc changer cela.
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)
Il s'agit d'un changement dans l'ordre des champs dans le formulaire d'édition. Pour éditer la page d'administration de cette manière, créez une classe pour chaque modèle et passez-la à ʻadmin.site.register () `comme deuxième argument.
Vous pouvez également diviser le formulaire en spécifiant «field set» comme indiqué ci-dessous.
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)
Les choix actuellement associés à la question ne sont plus gérables. Pour le moment, enregistrez le modèle comme la première question.
from django.contrib import admin
from .models import Choice, Question
# ...
admin.site.register(Choice)
Vous pouvez maintenant le traiter comme une question.
Les questions peuvent également être sélectionnées correctement. Appuyez sur + pour passer à la nouvelle page de questions. Une fois créée, la question nouvellement créée sera redirigée vers la page Créer un choix du choix sélectionné. (Beaucoup de haute technologie)
À partir de là, modifions-le pour que Choice puisse être créé en même temps lors de la création de Quesition.
Supprimez ʻadmin.site.register () `pour Choice et modifiez-le comme suit:
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)
Vous pouvez travailler avec différents modèles en utilisant ʻadmin.StackedInline`.
Cela se traduira par:
Il existe également un lien «Ajouter un autre choix» au bas du formulaire. C'est aussi de la haute technologie.
Vous pouvez également utiliser «TabularInline» au lieu de «StackedInline» pour travailler avec d'autres modèles. Si vous l'utilisez, ce sera comme suit.
Une page de liste de modifications est une telle page.
Par défaut, il est censé afficher le str
de l'objet.
Définissez list_display
pour ajouter une autre colonne à cette liste.
polls/admin.py
class QuestionAdmin(admin.ModelAdmin):
# ...
list_display = ('question_text', 'pub_date', 'was_published_recently')
En plus des noms de champ, vous pouvez également spécifier des méthodes pour le modèle comme décrit ci-dessus.
Cela vous donnera une liste comme celle-ci.
Si vous appuyez sur l'en-tête de la colonne (la partie appelée TEXTE DE LA QUESTION), il sera trié en conséquence. C'est aussi de la haute technologie.
De plus, la partie was_published_recently
est une méthode, elle ne correspond donc pas à cela.
Ceci est corrigé dans polls / models.py
.
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?'
Définissez également la fonction de filtre / recherche dans cette liste.
Utilisez respectivement list_filter
et search_fields
.
polls/admin.py
list_filter = ['pub_date']
search_fields = ['question_text']
Jusqu'à présent, nous avons ajouté la fonctionnalité de la page d'administration. Ensuite, nous changerons le design.
Créez un répertoire templates
dans votre répertoire de projet. (Le répertoire où se trouvent manage.py
etc.)
Modifiez 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 est une liste de répertoires du système de fichiers que Django vérifie lors du chargement des modèles. C'est comme un chemin de recherche.
Trouvez le répertoire des modèles d'administration de Django (django / contrib / admin / templates) et copiez le modèle ʻadmin / base_site.html` dans le répertoire nouvellement créé.
Vous pouvez trouver l'emplacement du fichier source Django avec la commande suivante.
$ 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 %}
Vous pouvez remplacer le modèle de cette manière.
J'ai changé l'en-tête du site à titre d'exemple, mais vous pouvez faire de même avec l'attribut django.contrib.admin.AdminSite.site_header
.
Vous avez maintenant terminé tous les tutoriels officiels de Django! Bien sûr, il y avait des similitudes avec Rails et Phoenix, mais les spécifications étaient assez différentes et j'ai aimé étudier!
Bonne vie Django!
p.s. Si vous trouvez des erreurs ou des malentendus dans cette série, veuillez faire une demande de modification ou commenter doucement ...