1.0 模型
1.1 建立模型
在每一個app的models.py檔案中
class UserInfo(models.Model):
'''
當前的類是模型類,記錄的是將來的使用者的基本資訊
'''
username = models.CharField(max_length=20)
gender = models.BooleanField()
user_add = models.CharField(max_length=200)
class Meta:
db_table = 'userinfo'
verbose_name = '使用者資訊表'
def __str__(self):
'''將模型的例項物件以字串的形式輸出'''
return self.username
注意點:
1、模型類的指定表名,如果沒有指定表名,資料庫中的表名app名字小寫_模型類名小寫,通過meta裡面的屬性db_table來指定表名
2、主鍵,Django會為每一個模型類建立一個自增長的主鍵,每一個模型只能有一個主鍵列
3、關於列(屬性)命名限制
(1)不允許使用__
(2)定義語法 屬性=models.欄位型別(選項)
(3)不允許使用保留字
1.2 修改模型欄位
出現的原因:
要修改的表已經存在資料
解決方法:
1、直接為已經存在的資料新增該欄位的資料
2、退出遷移,直接為該欄位建立預設值
1.3 欄位型別
型別 | 描述 |
---|
CharField | 字串,max_length表示最大的字元數 |
DateField | 日期,auto_now=False表示每一次儲存當前物件的時候,自動設定該欄位你的時間為當前時間,用於’最後一次修改’的時間戳, auto_now_add=False表示的是當前物件第一次被建立的時候自動設定當前時間,用於建立的時間戳,這兩個屬性是互斥的 |
DateTimeField | 日期時間,引數和上述一致 |
TimeField | 時間,引數和上述一致 |
IntegerField | 整數 |
BooleanField | 布林欄位,True False |
SmallIntegerField | 小整型 |
ForeignKey | 外來鍵,寫在多的一方(從表),預設狀態下通過主表的id連線的,但是可以通過屬性,重新設定關聯欄位 |
FileField | 上傳檔案欄位 |
ImageField | 繼承於FILEFIELD,對上傳的內容進行校驗,確保它是有效的圖片 |
1.4 約束
型別 | 描述 |
---|
primary_key | 主鍵,設定為True,那麼,這個欄位就是模型 的主鍵 |
unique | 設定為True,這個欄位的值為唯一值, |
null | 設定為True,說明允許這個欄位為空值,預設值是False,這個設定是指資料庫範疇上的空值 |
blank | 設定為True,說明這個欄位允許空白,預設值是False,這個是表單驗證驗證範疇上的 |
db_index | 當前的設定為True,則在表中會為此欄位設定索引,預設是False |
db_column | 欄位的名稱,如果沒有指定,則直接使用屬性的名稱 |
default | 預設 |
choices | 可以提供選擇 |
1.5 TypeError: init() missing 1 required positional argument: ‘on_delete’
出現原因:
外來鍵在某些django版本中,需要設定on_delete屬性,以保證從表與主表的資料聯絡
on_delete這個屬性,主表刪除資料的時候,從表的相關操作
選項 | 描述 |
---|
models.CASCADE | 級聯,刪除主表的資料連同從表的的資料一起刪除 |
models.DO_NOTHING | 不做任何操作 |
models.PROTECT | 保護,通過丟擲protecterror,阻止刪除主表中有外來鍵應用的資料 |
models.SET_NULL | 設定NULL,這個欄位已經設定為null=True的時候可以使用 |
models.SET_DEFAULT | 設定為預設值,僅僅在當前欄位設定了預設值的時候可以使用 |