文章

Django - 管理後台

今天我們將學習如何有效利用 Django 的管理後台來管理資料。管理後台是 Django 的強大功能之一,可以快速操作資料庫數據,並對模型進行視覺化管理。


課程目標

  • 瞭解 Django 管理後台的功能與用途。
  • 學習如何自訂後台界面,提升管理效率。
  • 掌握如何為管理後台新增與優化模型的呈現。

課程內容

1. 啟用管理後台

1.1 創建超級用戶

  • 要使用 Django 的管理後台,首先需要創建一個超級用戶。
  • 執行以下命令:
    1
    
    python manage.py createsuperuser
    
  • 輸入用戶名、電子郵件和密碼以完成創建。

1.2 啟動開發伺服器

  • 啟動伺服器並訪問管理後台:
    1
    
    python manage.py runserver
    
  • 在瀏覽器中打開 http://127.0.0.1:8000/admin/,用剛剛創建的超級用戶帳號登入。

2. 註冊模型到管理後台

2.1 註冊模型

  • 打開 admin.py 並將模型註冊到後台。
  • 範例:

    1
    2
    3
    4
    
    from django.contrib import admin
    from .models import Book
    
    admin.site.register(Book)
    

2.2 驗證模型顯示

  • 刷新管理後台頁面,應該可以看到 Book 模型的條目。
  • 點擊進入後可新增、編輯和刪除資料。

3. 自訂管理後台

3.1 使用 ModelAdmin 自訂行為

  • 可以自訂模型在後台的顯示方式,增加更高的管理效率。

3.2 自訂列表頁面

  • admin.py 中使用 ModelAdmin 顯示更多字段:
    1
    2
    3
    4
    5
    6
    
    @admin.register(Book)
    class BookAdmin(admin.ModelAdmin):
        list_display = ('title', 'author', 'published_date', 'price')  # 顯示的欄位
        list_filter = ('published_date', 'author')  # 篩選條件
        search_fields = ('title', 'author')  # 搜索框
        ordering = ('-published_date',)  # 排序方式
    

3.3 自訂表單頁面

  • 顯示特定的字段或群組:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    @admin.register(Book)
    class BookAdmin(admin.ModelAdmin):
        fields = ('title', 'author', 'price')  # 自訂顯示的字段
        fieldsets = (
            ('基本信息', {
                'fields': ('title', 'author')
            }),
            ('價格信息', {
                'fields': ('price',),
            }),
        )
    

4. 優化管理體驗

4.1 添加關聯模型

  • 假設我們有一個 Author 模型與 Book 模型相關聯:

    1
    2
    3
    4
    5
    6
    7
    8
    
    from django.db import models
    
    class Author(models.Model):
        name = models.CharField(max_length=100)
        bio = models.TextField(blank=True)
    
        def __str__(self):
            return self.name
    
  • AuthorBook 的關係在後台中顯示:

    1
    2
    3
    4
    
    @admin.register(Book)
    class BookAdmin(admin.ModelAdmin):
        list_display = ('title', 'author', 'published_date', 'price')
        search_fields = ('title', 'author__name')  # 支援關聯搜索
    

4.2 使用內聯模型

  • Book 的表單中直接管理相關的 Author 資料:

    1
    2
    3
    4
    5
    6
    7
    
    class BookInline(admin.TabularInline):
        model = Book
        extra = 1  # 預設額外顯示的空白行數
    
    @admin.register(Author)
    class AuthorAdmin(admin.ModelAdmin):
        inlines = [BookInline]
    

5. 自訂後台樣式與訊息

5.1 自訂站點標題

  • admin.py 中修改後台標題:
    1
    2
    3
    
    admin.site.site_header = "Django 課程管理後台"
    admin.site.site_title = "Django 後台"
    admin.site.index_title = "歡迎使用 Django 管理系統"
    

5.2 添加操作功能

  • 為列表頁面添加批量操作:

    1
    2
    3
    4
    5
    6
    7
    8
    
    @admin.register(Book)
    class BookAdmin(admin.ModelAdmin):
        actions = ['set_price_to_zero']
    
        def set_price_to_zero(self, request, queryset):
            queryset.update(price=0)
            self.message_user(request, "成功將價格設置為 0!")
        set_price_to_zero.short_description = "將價格設置為 0"
    

6. 本日總結

  • 瞭解了 Django 管理後台的功能與重要性。
  • 學會註冊模型並自訂後台行為以提升管理效率。
  • 掌握了如何優化後台界面以適應實際需求。

作業

  1. 設計一個新的模型(例如 Publisher),並在管理後台中添加與 Book 的關聯。
  2. 自訂管理後台,為 Book 增加一個批量操作功能。
  3. 修改管理後台標題與描述,創建一個符合你應用主題的管理界面。

本文章以 CC BY 4.0 授權