Django 模型
Django 模型是資料庫中的一個表。
Django 模型
到目前為止,本教程中的輸出都是來自 Python 或 HTML 模板的靜態資料。
現在我們將看到 Django 如何允許我們處理資料,而無需更改或上傳檔案。
在 Django 中,資料是透過稱為模型(Models)的物件建立的,實際上它們是資料庫中的表。
建立表(模型)
要建立模型,請導航到 `/members/` 資料夾中的 models.py
檔案。
開啟它,然後透過建立 Member
類
來新增一個 Member
表,並在其中描述表字段。
my_tennis_club/members/models.py
:
from django.db import models
class Member(models.Model):
firstname = models.CharField(max_length=255)
lastname = models.CharField(max_length=255)
第一個欄位 firstname
是一個文字欄位,將包含會員的名字。
第二個欄位 lastname
也是一個文字欄位,包含會員的姓氏。
firstname
和 lastname
都被設定為最多可以包含 255 個字元。
SQLite 資料庫
當我們建立 Django 專案時,我們得到了一個空的 SQLite 資料庫。
它被建立在 my_tennis_club
的根資料夾中,檔名為 db.sqlite3
。
預設情況下,Django 專案中建立的所有模型都將在此資料庫中作為表建立。
遷移
現在我們已經在 models.py
檔案中描述了一個模型,我們必須執行一個命令來實際在資料庫中建立表。
導航到 `/my_tennis_club/` 資料夾並執行此命令:
py manage.py makemigrations members
這將產生以下輸出:
Migrations for 'members'
members\migrations\0001_initial.py
- Create model Member
(myworld) C:\Users\Your Name\myworld\my_tennis_club>
Django 建立一個描述更改的檔案,並將該檔案儲存在 `/migrations/` 資料夾中。
my_tennis_club/members/migrations/0001_initial.py
:
# Generated by Django 4.1.2 on 2022-10-27 11:14
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='Member',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('firstname', models.CharField(max_length=255)),
('lastname', models.CharField(max_length=255)),
],
),
]
請注意,Django 為您的表插入了一個 id
欄位,它是一個 自動遞增數字
(第一個記錄的值為 1,第二個記錄為 2 等),這是 Django 的預設行為,您可以透過描述自己的 id
欄位來覆蓋它。
表尚未建立,您需要再執行一個命令,然後 Django 將基於 `/migrations/` 資料夾中新檔案的內容,建立並執行一個 SQL 語句。
執行 migrate 命令
py manage.py migrate
這將產生以下輸出:
要執行的操作
應用所有遷移:admin, auth, contenttypes, members, sessions
正在執行遷移
Applying members.0001_initial... OK
(myworld) C:\Users\Your Name\myworld\my_tennis_club>
現在您的資料庫中有一個 Member
表了!
檢視 SQL
順帶一提:您可以透過執行此命令(帶有遷移編號)來檢視上面遷移中執行的 SQL 語句。
py manage.py sqlmigrate members 0001
這將產生以下輸出:
BEGIN;
--
-- Create model Member
--
CREATE TABLE "members_member" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "firstname" varchar(255) NOT NULL, "lastname" varchar(255) NOT NULL); COMMIT;