Django模型
-
定義:模型是 Django 中用于定義數據庫結構的 Python 類。每個模型類對應數據庫中的一張表,類的屬性對應表的字段。
-
作用:通過模型,Django 可以將 Python 代碼與數據庫表結構關聯起來,開發者無需直接編寫 SQL 語句即可操作數據庫。
常用字段
字段類型 | 說明 | 示例 |
---|---|---|
CharField | 用于存儲較短的字符串,必須指定?max_length 。 | name = models.CharField(max_length=100) |
TextField | 用于存儲大段文本,不需要指定最大長度。 | description = models.TextField() |
IntegerField | 用于存儲整數。 | age = models.IntegerField() |
BooleanField | 用于存儲布爾值(True /False )。 | is_published = models.BooleanField(default=False) |
DateField | 用于存儲日期(年月日)。 | birth_date = models.DateField() |
DateTimeField | 用于存儲日期和時間。 | created_at = models.DateTimeField(auto_now_add=True) |
EmailField | 用于存儲電子郵件地址,會自動驗證格式。 | email = models.EmailField(max_length=254) |
URLField | 用于存儲 URL,會自動驗證格式。 | website = models.URLField(max_length=200) |
DecimalField | 用于存儲固定精度的十進制數,需指定?max_digits ?和?decimal_places 。 | price = models.DecimalField(max_digits=10, decimal_places=2) |
FloatField | 用于存儲浮點數。 | rating = models.FloatField() |
ForeignKey | 用于定義多對一關系,指向另一個模型。 | author = models.ForeignKey(Author, on_delete=models.CASCADE) |
OneToOneField | 用于定義一對一關系。 | profile = models.OneToOneField(Profile, on_delete=models.CASCADE) |
ManyToManyField | 用于定義多對多關系。 | tags = models.ManyToManyField(Tag) |
FileField | 用于上傳文件。 | file = models.FileField(upload_to='uploads/') |
ImageField | 用于上傳圖片,繼承自?FileField ,會自動驗證是否為圖片。 | photo = models.ImageField(upload_to='photos/') |
UUIDField | 用于存儲 UUID(通用唯一標識符)。 | id = models.UUIDField(primary_key=True, default=uuid.uuid4) |
AutoField | 自動遞增的整數字段,通常用于主鍵。 | id = models.AutoField(primary_key=True) |
BigAutoField | 類似?AutoField ,但支持更大的范圍(64 位整數)。 | id = models.BigAutoField(primary_key=True) |
SlugField | 用于存儲短標簽(URL 友好的字符串),通常用于 URL。 | slug = models.SlugField(unique=True) |
BinaryField | 用于存儲二進制數據。 | data = models.BinaryField() |
DurationField | 用于存儲時間間隔(如天數、小時數等)。 | duration = models.DurationField() |
GenericIPAddressField | 用于存儲 IPv4 或 IPv6 地址。 | ip_address = models.GenericIPAddressField() |
JSONField | 用于存儲 JSON 數據。 | metadata = models.JSONField() |
常用參數
參數 | 說明 |
---|---|
max_length | 指定字段的最大長度(如?CharField )。 |
null | 如果為?True ,數據庫中將允許存儲?NULL ?值。 |
blank | 如果為?True ,字段在表單中可以為空。 |
default | 指定字段的默認值。 |
unique | 如果為?True ,字段值必須在表中唯一。 |
primary_key | 如果為?True ,該字段將作為模型的主鍵。 |
choices | 提供一個可選的選項列表(如?GENDER_CHOICES = [('M', 'Male'), ('F', 'Female')] )。 |
auto_now | 每次保存對象時自動設置為當前時間(常用于?DateTimeField )。 |
auto_now_add | 對象第一次創建時自動設置為當前時間(常用于?DateTimeField )。 |
upload_to | 指定文件上傳的目錄(用于?FileField ?和?ImageField )。 |
on_delete | 指定外鍵關聯的對象被刪除時的行為(如?CASCADE 、SET_NULL ?等)。 |
注意:id 字段會自動生成,無需顯式定義(Django 默認會添加一個自增的 id 主鍵,如果不是這種情況需要手動添加字段)
from django.db import modelsclass User(models.Model):username = models.CharField(max_length=100, unique=True)password = models.CharField(max_length=100)email = models.EmailField(unique=True)first_name = models.CharField(max_length=100)last_name = models.CharField(max_length=100)def __str__(self):return self.username
舉個例子models中添加一個商品 類中有id(自動生成)、name、code、price、crate_time、update_time大家自己創建下 按照上面的命令
class Product(models.Model):# id 字段會自動生成,無需顯式定義(Django 默認會添加一個自增的 id 主鍵)name = models.CharField(max_length=100, verbose_name="商品名稱")code = models.CharField(max_length=50, unique=True, verbose_name="商品編碼")price = models.DecimalField(max_digits=10, decimal_places=2, verbose_name="商品價格")create_time = models.DateTimeField(auto_now_add=True, verbose_name="創建時間")update_time = models.DateTimeField(auto_now=True, verbose_name="更新時間")
Migrations
-
定義:遷移是 Django 用來管理數據庫模式變更的機制。每次修改模型后,Django 會生成一個遷移文件,記錄模型的變化。
-
作用:遷移文件允許你將數據庫模式從一種狀態更新到另一種狀態,同時保留現有數據。
-
生成遷移文件:使用?
python manage.py makemigrations
?命令,Django 會檢測模型的變更,并生成相應的遷移文件。-
例如,修改user模型后,運行?
makemigrations
?會生成一個遷移文件,記錄這些變更。
-
product例子生成表名:myapp_product
makemigrations
?和?migrate
?的關系
-
makemigrations
:生成遷移文件,記錄模型的變更。 -
migrate
:應用遷移文件,將變更同步到數據庫中。 -
流程:
-
修改模型(如添加字段、修改字段類型等)。
-
運行?
python manage.py makemigrations
,生成遷移文件。(注意如果說有報錯需要查看自己的settings.py中是否包含INSTALLED_APPS是否包含了myapp) -
運行?
python manage.py migrate
,將遷移應用到數據庫(可以查看數據庫中建立的表,生成的表是app名稱_對象名)。
-