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/
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.
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.
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`)
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.
É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'
list_display_links = ('text',)
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):
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