[PYTHON] Personnalisez la page modèle de l'écran d'administration de Django

introduction

Cet article est l'article du 10ème jour de Django Advent Calender 2019

Par défaut, Django est livré avec un écran d'administration pratique, mais nous le personnaliserons pour le rendre encore plus pratique.

table des matières

Personnaliser la liste (change_list)

** Afficher la colonne **

@admin.register(Book)
class BookModelAdmin(adminModelAdmin):
    List_display = ("title", "publisher", "price")

** Colonne d'affichage des liens **

@admin.register(Book)
class BookModelAdmin(adminModelAdmin):
    List_display = ("title", "publisher", "price")
    list_display_links = ("title", "price")

** Colonne personnalisée **

@admin.register(Book)
class BookModelAdmin(adminModelAdmin):
    List_display = ("title", "publisher", "price_dollar")

    def price_dollar(self, obj):
        return obj.price * 0.0092

** Colonne clé associée **

@admin.register(Book)
class BookModelAdmin(admin.ModelAdmin):
    list_display = ("title", "publisher", "price", "get_establishment")

    def get_establishment(self, obj):
        return obj.publisher.establishment
    get_establishment.short_description = "publisher establishment"

Trier

@admin.register(Book)
class BookModelAdmin(admin.ModelAdmin):
    list_display = ("title", "publisher", "price")
    ordering = ("-price",)

** Modification simple ** Il sera possible de modifier sur la page de liste. Les doublons avec list_display_links ne peuvent pas être modifiés.

@admin.register(Book)
class BookModelAdmin(admin.ModelAdmin):
    list_display = ("title", "publisher", "price")
    list_display_links = ("title",)
    list_editable = ("publisher", "price")

** Champ de recherche **

@admin.register(Book)
class BookModelAdmin(admin.ModelAdmin):
    list_display = ("title", "publisher", "price")
    search_fields = ("title",)

filtre

@admin.register(Book)
class BookModelAdmin(admin.ModelAdmin):
    list_display = ("title", "publisher", "price")
    list_filter = ("publisher",)

Date

@admin.register(Book)
class BookModelAdmin(admin.ModelAdmin):
    list_display = ("title", "publisher", "price")
    date_hierarchy = "publish_date"

** Ajouter une action personnalisée **

@admin.register(Book)
class BookModelAdmin(admin.ModelAdmin):
    list_display = ("title", "publisher", "price")
    actions = ["make_published"]

    def make_published(self, request, queryset):
        queryset.update(publish_date=datetime.now())

    make_published.short_description = "Mark selected book as published"

** Supprimer l'action existante **

@admin.register(Book)
class BookModelAdmin(admin.ModelAdmin):
    list_display = ("title", "publisher", "price")

    def get_actions(self, request):
        actions = super().get_actions(request)
        if 'delete_selected' in actions:
            del actions['delete_selected']
        return actions

** Placez un lien pour accéder à la liste des autres modèles ** _ J'enquête parce que je pense qu'il existe un autre bon moyen. _ J'ai l'impression que je devrais faire quelque chose avec _ModelAdmin ou ChangeList. _

@admin.register(Book)
class BookModelAdmin(admin.ModelAdmin):
    list_display = ("title", "publisher", "price", "price_dollar", "get_year")
    list_filter = ("publisher",)

@admin.register(Publisher)
class PublisherModelAdmin(admin.ModelAdmin):
    list_display = ("name", "link_to_book")

    def link_to_book(self, obj):
        link = reverse("admin:shop_book_changelist")
        return format_html(
            '<a href="{}?publisher__id__exact={}">{}</a>', link, obj.pk, obj.name
        )

à la fin

Cette fois, j'ai personnalisé la partie d'affichage de la liste des modèles de l'écran de gestion. La personnalisation elle-même peut être personnalisée dans la mesure où il n'y a pas de parties intouchables telles que les écrans d'édition et les modèles de formulaires. Jouons avec.

Django: Documentation: admin site

Recommended Posts

Personnalisez la page modèle de l'écran d'administration de Django
Implémentez la fonction de saisie semi-automatique sur l'écran d'administration de Django
Essayez Ajax sur la page Django
[Django] Corrige le pluriel du nom du modèle sur l'écran de gestion
L'histoire de l'échec de la mise à jour de "calendar.day_abbr" sur l'écran d'administration de django
[Django] Vous souhaitez personnaliser la page d'administration?
Comment enregistrer une seule donnée sur l'écran de gestion de Django
Simulons le modèle neuronal d'Izhikevich sur le Web!
Faire de n'importe quelle clé la clé primaire dans le modèle Django
Comment filtrer les clés externes qui peuvent être sélectionnées sur l'écran d'administration de Django
Faire du modèle une chaîne sur le modèle HTML Django