Historique d'apprentissage pour participer au développement d'applications d'équipe en Python ~ Tutoriel Django 7 ~

introduction

C'est la fin de la partie basique du tutoriel Django. Enfin, jetons un œil à la personnalisation de la page d'administration de l'application. Django a une fonction appelée formulaire d'administration qui vous permet d'ajouter, de mettre à jour et de supprimer des enregistrements dans une table avec un navigateur sans utiliser SQL comme phpMyAdmin dans XAMPP, nous allons donc le personnaliser.

Personnalisation de base

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)

Sous la classe QuestionAdmin se trouve le contenu personnalisé. En d'autres termes, en créant une classe pour chaque modèle, vous pouvez modifier le contenu personnalisé de chaque table. Spécifiez chaque nom de colonne de la table créée par migration avec fields. À ce moment, ils sont affichés dans la position d'affichage réelle dans l'ordre à partir de la gauche. Ensuite, augmentons les champs.



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

Si vous définissez fields sur fieldsset et que vous le définissez sur(field name, {'fields': ['column name']}), vous pouvez afficher les informations de cette colonne. Par exemple, ('Date information', {'fields': ['pub_date']}) peut être affiché comme pub_date est Date information.

Ajouter un objet dans une table associée



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


Importez le modèle Choice et ajoutez ʻadmin.site.register (Choice). Cela vous permettra d'éditer le modèle «Choice». Cependant, cette fois, c'est une relation qu'il y a plusieurs réponses à une question, il est donc pratique de pouvoir ajouter un objet Choice avec lui lors de l'ajout d'un objet Question`, de cette façon Je vais le changer.



from django.contrib import admin

from .models import Choice, Question


class ChoiceInline(admin.TabularInline):
    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)


Définissez le modèle et le nombre de données à associer dans la classe ChoiceInline (dans l'exemple ci-dessus, un objet Question a trois champs pour l'objet Choice). Si vous spécifiez TabularInline comme argument, vous pouvez changer l'apparence du format de la table comme phpMyAdmin. Les champs avec «'classes': ['collapse']sont affichés dans un état réduit. Spécifiez la classeChoiceInline avec ʻinlines = [ChoiceInline].

Personnalisez la page qui indexe le modèle

En fait, si vous conservez la valeur par défaut, une seule colonne sera affichée sur la page qui répertorie les enregistrements du modèle (elle semble s'appeler Change List dans Django). Ce n'est pas pratique, rendons donc possible d'afficher toutes les colonnes de l'enregistrement. Ajoutez les éléments suivants à la classe QuestionAdmin de ʻadmin.py`.

polls/admin.py



#Spécification des colonnes à afficher dans la liste des modifications

list_display = ('question_text', 'pub_date', 'was_published_recently')


polls/models.py




class Question(models.Model):
	#Omission
    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?'


Modifiez la méthode was_published_recently () de models.py comme ci-dessus. Vous pouvez personnaliser la méthode plus en détail en lui ajoutant des attributs. Par exemple, si vous spécifiez short_description, vous pouvez remplacer le nom de la colonne par celui spécifié. Si vous spécifiez un nom de colonne dans ʻadmin_order_field, vous pouvez trier (filtrer) la colonne dans le navigateur. Si vous spécifiez l'attribut «booléen», une icône XX sera affichée à la place de «Vrai ou Faux». was_published_recently a une valeur de True ou False, donc il sera affiché comme une icône à la place. Revenons à ʻadmin.py à nouveau.

polls/admin.py




from django.contrib import admin
from .models import Question, Choice

# Register your models here.

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

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

admin.site.register(Question, QuestionAdmin)
# admin.site.register(Choice)

Le réglage de list_filter = ['pub_date'] est le réglage pour afficher la barre latérale du filtre avec le réglage de ʻadmin_order_fieldplus tôt. search_fields = ['question_text']est un paramètre pour afficher la zone de recherche. Cela vous permettra de rechercher dans laListe des modifications avec le terme de recherche que vous avez mis dans la colonne question_text` dans la zone de recherche dans ce cas.

finalement

Ceci termine les 7 chapitres du didacticiel Django. Cependant, jusqu'à présent, par exemple, il existe un chapitre sur les tests, le déploiement et la réutilisation en tant que chapitre supplémentaire pour ce didacticiel, et même si vous personnalisez l'écran de gestion de ce chapitre, vous pouvez utiliser des modèles, appliquer du CSS et gérer des fonctions. Il existe de nombreux paramètres plus détaillés, il reste donc beaucoup de choses à faire.

Quant à l'impression que j'ai terminé la course, je pense que Django, y compris le langage Python, est un peu difficile à comprendre pour ceux qui ont commencé à programmer à partir de zéro, mais au contraire, c'est certain pour ceux qui maîtrisent d'autres langages. Je pense qu'il est possible d'apprendre à un faible coût d'apprentissage. Désormais, je souhaite approfondir ma compréhension en créant mes propres produits, y compris des projets de développement d'équipe.

référence

[Python] Personnalisation du site de gestion Django (surface d'affichage) [Mémo inversé de l'écran de gestion Django] https://qiita.com/zenwerk/items/044c149d93db097cdaf8) Document Django

Recommended Posts

Historique d'apprentissage pour participer au développement d'applications d'équipe avec Python ~ Tutoriel Django 5 ~
Historique d'apprentissage pour participer au développement d'applications d'équipe avec Python ~ Tutoriel Django 4 ~
Historique d'apprentissage pour participer au développement d'applications d'équipe avec Python ~ Tutoriel Django 6 ~
Historique d'apprentissage pour participer au développement d'applications d'équipe en Python ~ Tutoriel Django 7 ~
Historique d'apprentissage pour participer au développement d'applications d'équipe en Python ~ Page d'index ~
Historique d'apprentissage pour participer au développement d'applications d'équipe en Python ~ Pensez un peu à la définition des exigences ~
Historique d'apprentissage pour participer au développement d'applications d'équipe avec Python ~ Supplément d'éléments de base et construction de l'environnement jupyterLab ~
Apprentissage de l'historique pour participer au développement d'applications d'équipe avec Python ~ Créer un environnement Docker / Django / Nginx / MariaDB ~
Apprentissage de l'histoire pour participer au développement d'applications en équipe avec Python ~ Après avoir terminé "Introduction à Python 3" de paiza learning ~
Tutoriel Python Django (2)
Tutoriel Python Django (8)
Tutoriel Python Django (6)
Tutoriel Python Django (7)
Tutoriel Python Django (1)
Tutoriel du didacticiel Python Django
Tutoriel Python Django (3)
Tutoriel Python Django (4)
Tutoriel Boost.NumPy pour l'extension de Python en C ++ (pratique)
[Implémentation pour l'apprentissage] Implémentation de l'échantillonnage stratifié en Python (1)
Notes d'apprentissage pour la fonction migrations dans le framework Django (2)
Résumé du didacticiel Python Django
Créez un environnement interactif pour l'apprentissage automatique avec Python
Structure de répertoire pour le développement piloté par les tests à l'aide de pytest en python
Développement d'applications pour tweeter en Python à partir de Visual Studio 2017
Notes d'apprentissage pour la fonction migrations dans le framework Django (3)
Notes d'apprentissage pour la fonction migrations dans le framework Django (1)
Apprendre en profondeur à l'expérience avec Python Chapitre 2 (Matériel pour une conférence ronde)
Développement de framework avec Python
Environnement de développement en Python
Développement du kit SDK AWS pour Python (Boto3) dans Visual Studio 2017
Développement Slackbot en Python
Tutoriel pour faire du développement piloté par les tests (TDD) avec Flask-1 Test Client Edition
Flux d'apprentissage pour les débutants en Python
Plan d'apprentissage Python pour l'apprentissage de l'IA
Techniques de tri en Python
Développement Python avec Visual Studio 2017
Mise à jour automatique de l'application Qt pour Python
Fiche technique du didacticiel Python Django
La recommandation de Checkio pour apprendre Python
[Pour organiser] Environnement de développement Python
Développement Python avec Visual Studio
À propos de "for _ in range ():" de python
Que diriez-vous d'Anaconda pour créer un environnement d'apprentissage automatique avec Python?
Redimensionner automatiquement les captures d'écran de l'App Store pour chaque écran en Python
Analyse des ondes cérébrales avec Python: tutoriel Python MNE
Mettre en œuvre l'apprentissage de l'empilement en Python [Kaggle]
Rechercher des commandes externes avec python
8 commandes fréquemment utilisées dans Python Django
Matériel pédagogique Web pour apprendre Python
[Pour les débutants] Django -Construction d'environnement de développement-
Options d'environnement de développement Python pour mai 2020
<Pour les débutants> bibliothèque python <Pour l'apprentissage automatique>
Paramètres Emacs pour l'environnement de développement Python
Python: prétraitement dans l'apprentissage automatique: présentation
Implémentation des règles d'apprentissage Perceptron en Python
Exécutez unittest en Python (pour les débutants)
Préparer un environnement de développement Python pour chaque projet dans un environnement Windows (VSCode + virtualEnvWrapper + Pylint)
Développement du site de publication d'évaluation des cartes MTG ~ Sortie de l'application Django dans 5 semaines ~