[TOC]
django的模型類定義在應用下的 `models.py` 文件中。
模型類繼承自 `django.db.models` 包下的 `Model` 類。
新創建應用 `book` ,我們將在此應用下做演示。
```python
python manage.py startapp book
```
## 1. 定義
以 ‘圖書-角色’為例創建模型類
```python
from django.db import models
class Book(models.Model):
b_title = models.CharField(max_length=20, verbose_name="標題")
b_pub_date = models.DateField(verbose_name="發布日期")
b_read = models.IntegerField(default=0, verbose_name="閱讀數")
b_comment = models.IntegerField(default=0, verbose_name="評論數")
is_delete = models.BooleanField(default=False, verbose_name="邏輯刪除")
class Meta:
db_table = "book"
verbose_name = "書籍"
verbose_name_plural = verbose_name
def __str__(self):
return self.b_title
class Role(models.Model):
GENDER_CHOICES = (
(0, 'female'),
(1, 'male')
)
r_name = models.CharField(max_length=20, verbose_name="角色名稱")
r_gender = models.SmallIntegerField(choices=GENDER_CHOICES, verbose_name="性別", default=0)
r_describe = models.CharField(max_length=200, verbose_name="描述信息", null=True)
r_book = models.ForeignKey(Book, on_delete=models.CASCADE, verbose_name="書籍")
is_delete = models.BooleanField(default=False, verbose_name="邏輯刪除")
class Meta:
db_table = "role"
verbose_name = "角色"
verbose_name_plural = verbose_name
def __str__(self):
return self.r_name
```
- `db_table` 指定數據表名字,如果未指明,將會以小寫 `應用名+模型類名` 為數據表名字。
- `verbose_name` 指定在 `admin` 站點中顯示的名字
- 如果沒設置主鍵,django會自動生成一個自動增長的主鍵列。如果設置了主鍵,django不會再自動生成。
- 屬性命名限制
- 不能是python的保留關鍵字。
- 不允許使用連續的下劃線,這是由django的查詢方式決定的。
- 定義屬性時需要指定字段類型,通過字段類型的參數指定選項,語法如下:
```
字段名 = models.類型名(約束)
```
定義模型類基本格式如下:
```pytho
from django.db import models
class 類名(models.Model):
字段名 = models.類型名(約束)
class Meta:
db_table = "表名"
verbose_name = admin中顯示名字
verbose_name_plural = admin中顯示名字復數
```
## 字段類型
django-ORM的基本字段類型
```
1、models.AutoField 自增列
如果沒有的話,默認會生成一個名稱為 id 的列,如果要顯示的自定義一個自增列,必須將給列設置為主鍵 primary_key=True。
2、models.CharField 字符串字段
必須 max_length 參數
3、models.BooleanField 布爾類型
不能為空,Blank=True
4、models.ComaSeparatedIntegerField 用逗號分割的數字=varchar
繼承CharField,所以必須 max_lenght 參數
5、models.DateField 日期類型 date
對于參數,auto_now = True 則每次更新都會更新這個時間;
auto_now_add 則只是第一次創建添加,之后的更新不再改變。
6、models.DateTimeField 日期類型 datetime
同DateField的參數
7、models.Decimal 十進制小數類型 = decimal
必須指定整數位max_digits和小數位decimal_places
8、models.EmailField 字符串類型(郵箱格式)
對字符串進行正則表達式驗證
9、models.FloatField 浮點類型 = double
10、models.IntegerField 整形
11、 整形范圍
integer_field_ranges = {
'SmallIntegerField': (-32768, 32767),
'IntegerField': (-2147483648, 2147483647),
'BigIntegerField': (-9223372036854775808, 9223372036854775807),
'PositiveSmallIntegerField': (0, 32767),
'PositiveIntegerField': (0, 2147483647),
}
12、models.IPAddressField 字符串類型(ip4格式)
13、models.GenericIPAddressField 字符串類型(ip4或ip6格式)
參數protocol可以是:both、ipv4、ipv6
驗證時,會根據設置報錯
14、models.NullBooleanField 允許為空的布爾類型
15、models.PositiveIntegerFiel 正Integer
16、models.PositiveSmallIntegerField 正smallInteger
17、models.SlugField 減號、下劃線、字母、數字
18、models.SmallIntegerField 數字
數據庫中的字段有:tinyint、smallint、int、bigint
19、models.TextField 字符串=longtext
20、models.TimeField 時間 HH:MM[:ss[.uuuuuu]]
21、models.URLField 字符串,地址正則表達式
22、models.BinaryField 二進制
23、models.ImageField 圖片 在數據庫中保存的是文件的路徑
24、models.FilePathField 文件
```
## 約束類型
```
1、null=True
數據庫中字段是否可以為空
2、blank=True
django的 Admin 中添加數據時是否可允許空值
3、primary_key = False
主鍵,對AutoField設置主鍵后,就會代替原來的自增 id 列
4、auto_now 和 auto_now_add
auto_now 自動創建---無論添加或修改,都是當前操作的時間
auto_now_add 自動創建---永遠是創建時的時間
5、choices 枚舉
GENDER_CHOICES = (
(0, 'male'),
(1, 'female')
)
r_gender = models.SmallIntegerField(choices=GENDER_CHOICES)
6、max_length 最大長度
7、default 默認值
8、verbose_name Admin中字段的顯示名稱
9、name|db_column 數據庫中的字段名稱
10、unique=True 不允許重復
11、db_index = True 數據庫索
引
12、editable=True 在Admin里是否可編輯
13、error_messages=None 錯誤提示
14、auto_created=False 自動創建
15、help_text 在Admin中提示幫助信息
16、validators=[]
17、upload-to 上傳路徑
```
- 1.介紹
- 2.工程搭建
- 2.1.環境配置
- 2.2.創建工程
- 2.3.創建子應用
- 2.3.1.pycharm打開項目
- 2.4.創建視圖
- 3.基本配置
- 3.1.settings基本配置項
- 3.2.路由配置
- 4.請求響應
- 4.1.request
- 4.2.response
- 4.3.cookie
- 4.4.session
- 5.類視圖中間件
- 5.1.類視圖
- 5.2中間件
- 6.數據庫
- 6.1.數據庫配置
- 6.2定義模型類
- 6.3數據庫遷移
- 6.4數據庫操作
- 6.5查詢集
- 6.6模型管理器
- 7.模板表單
- 7.1使用模板
- 7.2模板標簽
- 7.3表單
- 8.后臺管理
- 8.1Admin
- 8.2自定義模型類樣式
- 8.3列表頁