[PYTHON] [Django] Vous souhaitez personnaliser la page d'administration?

introduction

Pour ceux qui disent: "Je n'ai jamais personnalisé la page d'administration de Django". Ceci est une édition pour débutants.

Il semble qu'il puisse être utilisé sans personnalisation, mais lorsque des personnes autres que des ingénieurs le touchent, est-il un peu seul par défaut?

Plutôt qu'une explication détaillée, c'est un style qui soulève rapidement de bons termes lorsque vous google. Il est difficile de l'assembler correctement. .. ..

Documentation Django https://docs.djangoproject.com/en/3.0/ref/contrib/admin/

ModelAdmin classe

Fondamentalement, créez une sous-classe de la classe ModelAdmin et décrivez le contenu de la personnalisation. Par exemple, si vous souhaitez personnaliser un modèle nommé SampleModel, procédez comme suit.

admin.py



from django.contrib import admin

#Normalement, nommez-le "nom du modèle + Admin"
class SampleModelAdmin(admin.ModelAdmin):
    '''
Décrivez le contenu de personnalisation dans cette classe
    '''

#Appliquer SampleModelAdmin à SampleModel
admin.site.register(SampleModel, SampleModelAdmin)

À partir de là, écrivez uniquement la description dans la classe ModelAdmin. Par exemple


def hoge():
    return

Si vous écrivez, en fait

admin.py


class SampleModelAdmin(admin.ModelAdmin):
    def hoge():
        return

Veuillez lire comme.

Quelle colonne afficher

スクリーンショット 2020-08-08 20.38.22.png

Le nom de la colonne est affiché en haut de la liste des enregistrements, mais définissons la colonne que vous souhaitez afficher. Ce qui suit est un exemple lorsque le modèle comporte des champs appelés text et updated_at.

list_display = ('__str__', 'text', 'updated_at')  #Affichez ces trois colonnes

Ensuite, si vous souhaitez afficher une valeur qui ne figure pas dans le champ.

list_display = ('__str__', 'text', 'updated_at', 'get_owner_name')

def get_owner_name(self, obj):
    #Le deuxième argument, obj, représente l'enregistrement lui-même
    return "I am owner"
get_owner_name.short_description = 'Le nom du propriétaire'

Cela ajoutera une colonne appelée «Nom du propriétaire», qui affichera «Je suis propriétaire» sur tous les enregistrements.

Définir la cible de recherche

スクリーンショット 2020-08-08 21.08.22のコピー.png

Il y a un champ de recherche en haut, mais vous pouvez affiner la cible de recherche.

# SampleModel.text, SampleModel.updated_at, SampleModel.owner.Rechercher un nom d'utilisateur
search_fields = ('text', 'updated_at', 'owner__username`)

Ajouter une opération

スクリーンショット 2020-08-08 21.32.13のコピー.png

Par défaut, il devrait y avoir une opération appelée "Supprimer la sélection <nom du modèle>". Les actions auto-faites sont décrites dans le format de liste dans ʻactions` comme suit, mais "Supprimer la sélection <nom du modèle>" continue d'exister même s'il n'est pas explicitement inclus ici.

actions = ['my_custom_action']

def my_custom_action(self, request, queryset):
    #Quelque chose de traitement
    return None
my_custom_action.short_description = 'Action seulement pour moi'

Si vous définissez return None, rien ne sera fait lorsque l'opération sera terminée, mais par exemple, vous pouvez retourner un modèle et effectuer des transitions de page.

Changer le nom d'affichage du modèle

スクリーンショット 2020-08-08 21.32.13.png

Écrivez ceci dans la classe d'origine Model au lieu de ModelAdmin.


class SampleModel(models.Model):
     class Meta:
         verbose_name = 'Exemple de modèle'
         verbose_name_plural = 'Liste d'exemples de modèles'

Voulez-vous mettre un lien sur le terrain


list_display_links = ('text',)

Avancé: personnaliser le processus de recherche

Nous avons introduit la personnalisation de la cible de recherche, mais vous pouvez également personnaliser le type de recherche réellement effectuée lorsqu'un mot de recherche (requête) est donné. Ce sera long, donc je vais juste vous donner un aperçu, mais définissez la fonction suivante pour remplacer le processus de recherche.


def get_changelist(self, request, **kwargs):

finalement

Si vous pouvez personnaliser ce qui précède, ne seriez-vous pas satisfait au début? J'écrirai sur la personnalisation du modèle de page d'administration lui-même et les transitions de page dans admi dans un autre article.

Recommended Posts

[Django] Vous souhaitez personnaliser la page d'administration?
Réglage du site d'administration de Django
Je n'arrive pas à me connecter à la page d'administration avec Django 3
L'utilisateur non connecté de Django souhaite passer à login.html
[Python] Présentez UIKit3 au projet Django
Vous voulez ajouter des indices de type aux décorateurs Python?
Résumé du tutoriel Django pour les débutants par les débutants ⑦ (Personnaliser l'administrateur)
Je veux corriger Datetime.now dans le test de Django
Je souhaite personnaliser l'apparence de zabbix
Personnalisez la page modèle de l'écran d'administration de Django
Je souhaite télécharger une application Django sur heroku
python débutant essaie d'ajouter une authentification de base à l'administrateur de Django
Je veux faire défiler la table de décalage Django, mais ...
Étapes de l'installation de Django à l'affichage de la page html
TemplateView les modèles que vous souhaitez apprendre en premier dans Django
Lorsque vous souhaitez filtrer avec le framework Django REST
Authentification unique à l'application Django avec AWS SSO
[Django] Comment rediriger les utilisateurs non connectés vers la page de connexion
Initialiser l'application Django
impossible d'importer django
mettre à jour django version 1.11.1 vers 2.2
[Django] Mémorandum lorsque vous souhaitez communiquer de manière asynchrone [Python3]
[Django] Je souhaite me connecter automatiquement après une nouvelle inscription
Si vous souhaitez que vos collègues utilisent la même langue
Lorsque vous oubliez le nom d'utilisateur et le mot de passe de l'écran de gestion dans Django
[Django] Redirection vers la page précédente après avoir soumis le formulaire POST