文章

Django - 模型與資料庫

今天我們將深入學習 Django 的模型與資料庫的整合,並設計、操作資料表以儲存和管理應用中的數據。


課程目標

  • 瞭解 Django ORM (Object-Relational Mapping) 的基本概念。
  • 學習如何設計模型來映射資料庫表。
  • 掌握資料遷移的流程與操作數據的基本方法。

課程內容

1. 模型 (Model) 概述

1.1 模型的作用

  • Django 的模型是一種定義資料表結構的方式,使用 Python 類來描述。
  • 模型中的每個屬性對應資料表的一個欄位,Django 會自動將模型轉換為資料庫結構。

1.2 Django ORM 的優勢

  • 提供高層級的數據操作接口,無需直接撰寫 SQL。
  • 支持多種資料庫後端(例如 PostgreSQL、MySQL、SQLite)。

2. 定義模型

2.1 創建模型

models.py 中定義一個簡單的模型,例如書籍資訊:

1
2
3
4
5
6
7
8
9
10
11
from django.db import models

class Book(models.Model):
    title = models.CharField(max_length=200)  # 書名
    author = models.CharField(max_length=100)  # 作者
    published_date = models.DateField()  # 出版日期
    isbn = models.CharField(max_length=13, unique=True)  # ISBN
    price = models.DecimalField(max_digits=10, decimal_places=2)  # 價格

    def __str__(self):
        return self.title  # 返回書名作為模型的字串表示

2.2 模型中的欄位類型

  • CharField:字串欄位,需指定最大長度。
  • DateField:日期欄位。
  • DecimalField:精確的數字類型,用於價格等。
  • IntegerField:整數類型。
  • BooleanField:布林值。
  • TextField:長字串。

2.3 模型的屬性與方法

  • 使用 __str__() 方法定義模型的可讀性。
  • 可以新增自訂方法,例如計算折扣價。

3. 資料庫遷移

3.1 建立遷移

在定義好模型後,執行以下命令生成遷移文件:

1
python manage.py makemigrations

這會生成類似以下的遷移文件:

1
migrations/0001_initial.py

3.2 應用遷移

執行以下命令將遷移應用到資料庫:

1
python manage.py migrate

3.3 檢查資料庫

  • 在 PostgreSQL 中可以使用工具(如 pgAdmin 或 psql)檢查資料表結構。
  • Django 自動為模型創建對應的資料表。

4. 操作資料

4.1 使用 Shell 操作

  1. 啟動 Django Shell:

    1
    
    python manage.py shell
    
  2. 創建數據:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    from myapp.models import Book
    
    book = Book(
        title="Django for Beginners",
        author="William S. Vincent",
        published_date="2024-01-01",
        isbn="1234567890123",
        price=39.99,
    )
    book.save()  # 儲存到資料庫
    
  3. 查詢數據:

    1
    2
    3
    4
    5
    6
    
    books = Book.objects.all()  # 獲取所有書籍
    print(books)
    
    # 查詢特定條件的數據
    django_books = Book.objects.filter(title__icontains="Django")
    print(django_books)
    
  4. 更新數據:

    1
    2
    3
    
    book = Book.objects.get(id=1)
    book.price = 29.99
    book.save()
    
  5. 刪除數據:

    1
    2
    
    book = Book.objects.get(id=1)
    book.delete()
    

5. 管理後台的使用

5.1 註冊模型

admin.py 中註冊模型,讓其顯示於 Django 的管理後台:

1
2
3
4
5
6
from django.contrib import admin
from .models import Book

@admin.register(Book)
class BookAdmin(admin.ModelAdmin):
    list_display = ('title', 'author', 'published_date', 'price')

5.2 使用後台管理數據

  1. 啟動開發伺服器並訪問 http://127.0.0.1:8000/admin/
  2. 使用超級用戶帳號登入,新增或管理數據。

6. 本日總結

  • 理解了模型的作用與基本結構。
  • 學習了如何進行資料遷移,並操作資料。
  • 瞭解了 Django 管理後台的基本功能。

作業

  1. 為應用新增一個模型(例如 Author),並設置與 Book 的關聯。
  2. 嘗試在 Django 管理後台新增或修改數據,觀察對資料庫的影響。
  3. views.py 中新增一個視圖,顯示所有書籍的列表,並使用模板渲染。

本文章以 CC BY 4.0 授權