Résumé du tutoriel Django pour les débutants par les débutants ⑦ (Personnaliser l'administrateur)

introduction

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)

Création de votre première application Django, partie 7

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)

personnaliser le formulaire d'administration

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)

image.png

Ajouter des objets relationnels

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.

image.png

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: image.png

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. image.png

Personnalisez la page de la liste des modifications sur le site d'administration

Une page de liste de modifications est une telle page. スクリーンショット 2020-01-06 19.25.14.png 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.

image.png 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']

Personnalisez l'apparence de votre site d'administration

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.

À la fin

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 ...

Recommended Posts

Résumé du tutoriel Django pour les débutants par les débutants ⑦ (Personnaliser l'administrateur)
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 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é du tutoriel Django pour les débutants par les débutants ① (création de projet ~)
Résumé du didacticiel Django pour les débutants par les débutants ④ (Vue générique)
Résumé du didacticiel Python Django
[Explication pour les débutants] Tutoriel TensorFlow MNIST (pour les débutants)
Résumé de l'apprentissage automatique par les débutants de Python
[Pour les débutants] Django -Construction d'environnement de développement-
Qu'est-ce que le grattage? [Résumé pour les débutants]
Tutoriel TensorFlow MNIST pour les débutants en ML
Résumé du didacticiel Django Girls Première moitié
Lien récapitulatif des bases de Pandas pour les débutants
[Déprécié] Tutoriel pour débutant Chainer v1.24.0
Tutoriel TensorFlow -MNIST pour les débutants en ML
[Explication pour les débutants] Tutoriel TensorFlow Deep MNIST
Résumé de Django
[Résumé des commandes Linux] Liste des commandes [À voir absolument pour les débutants]
[Django] Vous souhaitez personnaliser la page d'administration?
Résumé de Django
Fonctionnement Linux pour les débutants Résumé des commandes de base
Un manuel pour les débutants réalisé par des débutants Python
Une introduction à la programmation orientée objet pour les débutants par les débutants
À propos des fonctions d'ordre supérieur de Nim pour les débutants Nim écrites par les débutants Nim
Réalisation du didacticiel TensorFlow MNIST pour débutants en ML
Tutoriel Python Django (5)
Tutoriel Python Django (2)
Résumé du didacticiel Python
Prise en charge de l'internationalisation avec Django 1.9
mémo du didacticiel django
Tutoriel Python Django (8)
Tutoriel Python Django (6)
Démarrer le didacticiel Django 1
Résumé du filtre Django
Tutoriel Python Django (7)
Tutoriel Python Django (1)
Tutoriel du didacticiel Python Django
Tutoriel Python Django (3)
Tutoriel Python Django (4)
[Français] Tutoriel officiel NumPy "NumPy: les bases absolues pour les débutants"
python débutant essaie d'ajouter une authentification de base à l'administrateur de Django
J'ai essayé le tutoriel MNIST de tensorflow pour les débutants.
Résumé des méthodes de prétraitement pour les débutants en Python (trame de données Pandas)
[Linux] Principes de base de la configuration des autorisations par chmod pour les débutants
[Pour les débutants] Django Commandes fréquemment utilisées et collection de références