1.簡介
Django的模型(Model)是Django應(yīng)用程序的核心部分,用于定義和管理應(yīng)用中的數(shù)據(jù)結(jié)構(gòu)誊酌。每個模型都對應(yīng)一個數(shù)據(jù)庫表宅粥,而Django的ORM(對象關(guān)系映射)則允許你使用Python代碼來操作數(shù)據(jù)庫,而不需要編寫SQL語句诸衔。通過Django的模型雕沉,你可以定義數(shù)據(jù)字段集乔、設(shè)置字段類型和添加驗證規(guī)則。
示例代碼:
from django.db import models
class Author(models.Model):
name = models.CharField(max_length=100)
age = models.IntegerField()
2. 關(guān)系
在Django中坡椒,每個模型類對應(yīng)數(shù)據(jù)庫中的一個表扰路,每個模型字段對應(yīng)表中的一列。Django會根據(jù)你定義的模型自動生成相應(yīng)的數(shù)據(jù)庫表結(jié)構(gòu)倔叼,并提供CRUD(創(chuàng)建汗唱、讀取、更新丈攒、刪除)操作哩罪。
示例代碼:
# 模型定義
class Book(models.Model):
title = models.CharField(max_length=200)
author = models.ForeignKey(Author, on_delete=models.CASCADE)
published_date = models.DateField()
# 對應(yīng)的數(shù)據(jù)庫表結(jié)構(gòu)
# 表名:appname_book
# 列:id, title, author_id, published_date
3. 設(shè)置
Django支持使用多數(shù)據(jù)庫,可以通過配置 DATABASES
設(shè)置多個數(shù)據(jù)庫巡验,并在模型或查詢中指定使用哪個數(shù)據(jù)庫际插。
示例代碼:
# settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / "db.sqlite3",
},
'secondary': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'myotherdb',
'USER': 'myuser',
'PASSWORD': 'mypassword',
'HOST': 'localhost',
'PORT': '5432',
}
}
# 使用多數(shù)據(jù)庫
from django.db import models
class Author(models.Model):
name = models.CharField(max_length=100)
class Book(models.Model):
title = models.CharField(max_length=200)
author = models.ForeignKey(Author, on_delete=models.CASCADE)
# 在查詢中指定數(shù)據(jù)庫
Author.objects.using('secondary').all()
Book.objects.using('default').create(title="Django for Beginners", author=author)
4. 遷移
Django通過遷移(migration)機(jī)制來跟蹤和應(yīng)用模型變化。遷移文件記錄了模型的結(jié)構(gòu)變化显设,可以通過 makemigrations
和 migrate
命令生成和應(yīng)用遷移框弛。
示例代碼:
# 生成遷移文件
python manage.py makemigrations
# 應(yīng)用遷移文件
python manage.py migrate
示例代碼:
# 新增一個字段到Author模型
class Author(models.Model):
name = models.CharField(max_length=100)
age = models.IntegerField()
email = models.EmailField() # 新增字段
# 生成遷移文件
# 0002_auto__add_field_author_email.py
# 應(yīng)用遷移
python manage.py migrate