Django模型之欄位與約束

就是愛吃肉肉啊發表於2020-10-12

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)
    # user__phone = models.CharField(max_length=20)


    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設定為預設值,僅僅在當前欄位設定了預設值的時候可以使用

相關文章