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