
## 常用字段
### AutoField
映射到數據庫中是int類型,可以有自動增長的特性。一般不需要使用這個類型,如果不指定主鍵,那么模型會自動的生成一個叫做id的自動增長的主鍵。如果你想指定一個其他名字的并且具有自動增長的主鍵,使用AutoField也是可以的。
### BigAutoField
64位的整形,類似于AutoField,只不過是產生的數據的范圍是從1-9223372036854775807。
### BooleanField
在模型層面接收的是True/False。在數據庫層面是tinyint類型。如果沒有指定默認值,默認值是None。
### CharField
在數據庫層面是varchar類型。在Python層面就是普通的字符串。這個類型在使用的時候必須要指定最大的長度,也即必須要傳遞max_length這個關鍵字參數進去。
最大長度計算:[https://www.cnblogs.com/canger/p/9850727.html](https://www.cnblogs.com/canger/p/9850727.html)
### DateTimeField
日期時間類型,不僅僅可以存儲日期,還可以存儲時間。映射到數據庫中是datetime類型。
```
TIME_ZONE = 'Asia/Shanghai'
from django.utils.timezone import localtime,now
auto_now:在每次這個數據保存的時候,都使用當前的時間。
比如作為一個記錄修改日期的字段,可以將這個屬性設置為True。
auto_now_add:在每次數據第一次被添加進去的時候,都使用當前的時間。
比如作為一個記錄第一次入庫的字段,可以將這個屬性設置為True。
```
### EmailField
類似于CharField。在數據庫底層也是一個varchar類型。最大長度是254個字符。
### FileField
用來存儲文件的。
### ImageField
用來存儲圖片文件的。
### FloatField
浮點類型。映射到數據庫中是float類型。
### IntegerField
整形。值的區間是-2147483648——2147483647。
### BigIntegerField
大整形。值的區間是-9223372036854775808——9223372036854775807。
### PositiveIntegerField
正整形。值的區間是0——2147483647。
### SmallIntegerField
小整形。值的區間是-32768——32767。
### PositiveSmallIntegerField
正小整形。值的區間是0——32767。
### TextField
大量的文本類型。映射到數據庫中是longtext類型。
### UUIDField
只能存儲uuid格式的字符串。uuid是一個32位的全球唯一的字符串,一般用來作為主鍵。
### URLField
類似于CharField,只不過只能用來存儲url格式的字符串。并且默認的max_length是200。
## Field的常用參數
### null
如果設置為True,Django將會在映射表的時候指定是否為空。默認是為False。在使用字符串相關的Field(CharField/TextField)的時候,官方推薦盡量不要使用這個參數,也就是保持默認值False。因為Django在處理字符串相關的Field的時候,即使這個Field的null=False,如果你沒有給這個Field傳遞任何值,那么Django也會使用一個空的字符串""來作為默認值存儲進去。因此如果再使用null=True,Django會產生兩種空值的情形(NULL或者空字符串)。如果想要在表單驗證的時候允許這個字符串為空,那么建議使用blank=True。如果你的Field是BooleanField,那么對應的可空的字段則為NullBooleanField。
### db_column
這個字段在數據庫中的名字。如果沒有設置這個參數,那么將會使用模型中屬性的名字。
### default
默認值。可以為一個值,或者是一個函數,但是不支持lambda表達式。并且不支持列表/字典/集合等可變的數據結構。
### primary_key
是否為主鍵。默認是False。
### unique
在表中這個字段的值是否唯一。一般是設置手機號碼/郵箱等。
更多Field參數請參考官方文檔:https://docs.djangoproject.com/zh-hans/2.2/ref/models/fields/
## 模型中Meta配置
對于一些模型級別的配置。我們可以在模型中定義一個類,叫做Meta。然后在這個類中添加一些類屬性來控制模型的作用。比如我們想要在數據庫映射的時候使用自己指定的表名,而不是使用模型的名稱。那么我們可以在Meta類中添加一個db_table的屬性。
```
class Book(models.Model):
name = models.CharField(max_length=20,null=False)
desc = models.CharField(max_length=100,name='description',db_column="description1")
class Meta:
db_table = 'book_model'
```
### db_table
這個模型映射到數據庫中的表名。如果沒有指定這個參數,那么在映射的時候將會使用模型名來作為默認的表名。
### ordering
設置在提取數據的排序方式。比如我想在查找數據的時候根據添加的時間排序
```
class Book(models.Model):
name = models.CharField(max_length=20,null=False)
desc = models.CharField(max_length=100,name='description',db_column="description1")
pub_date = models.DateTimeField(auto_now_add=True)
class Meta:
db_table = 'book_model'
ordering = ['pub_date'] # 正序
ordering = ['-pub_date'] # 倒序
```
- 空白目錄
- 1-Django前導知識
- 1-1-虛擬環境
- 1-2-Django框架介紹與環境搭建
- 2-URL與視圖
- 2-1-URL與視圖
- 3-模板
- 3-1-模板介紹
- 3-2-模板變量
- 3-3-常用標簽
- 3-4-模板常用過濾器
- 3-5-模板結構優化
- 3-6-加載靜態文件
- 4-數據庫
- 4-1-操作數據庫
- 4-2-圖書管理系統
- 4-3-ORM模型介紹
- 4-4-ORM模型的增刪改查
- 4-5-模型常用屬性
- 4-6-外鍵和表
- 4-7-查詢操作
- 4-8-QuerySet的方法
- 4-9-ORM模型練習
- 4-10-ORM模型遷移
- 5-視圖高級
- 1-Django限制請求method
- 2-頁面重定向
- 3-HttpRequest對象
- 4-HttpResponse對象
- 5-類視圖
- 6-錯誤處理
- 6-表單
- 1-用表單驗證數據
- 2-ModelForm
- 3-文件上傳
- 7-session和cookie
- 1-session和cookie
- 8-memcached
- 1-memcached
- 9-阿里云部署
- 阿里云部署