Django orm中常用欄位及引數
阿新 • • 發佈:2022-03-06
orm中常用欄位及引數
列舉目前已學習orm常用欄位。
欄位 | 描述 |
---|---|
AutoField | 主鍵欄位:primary_key=True 但是orm會自動建立主鍵欄位,所以沒有使用。 |
CharField | 欄位註釋:varbose_name 長度:max_length |
IntegerField BigIntergerField |
整型:int |
DecimalField | 小數位:max_digits 小數點後的數位:decimal_places |
EmailField | 底層仍然是VarChar(254) |
DateField DateTimeField |
每次修改資料是會自動更新當前時間:auto_now 只在建立資料的時候記錄建立時間,後續不會自動修改:auto_now_add |
BooleanField | 布林值型別:(False/True) 對應資料庫中存(0/1) |
TextField | 文字型別:該欄位可用來儲存大段內容:(文章,部落格...) 無字數限制 |
FileField | 檔案欄位:引數:upload_to = "" 假設指定: upload_to = "/data" 給該欄位傳一個檔案物件,會自動將檔案儲存到/data目錄下,然後將檔案路徑儲存到資料庫/data/a.txt |
django除了提供很多欄位型別之外,還支援自定義欄位。
class MyCharField(models.Field): def __init__(self,max_length,*args,**kwargs): self.max_length = max_length # 呼叫父類的init方法 super().__init__(max_length=max_length,*args,**kwargs) # 一定要是關鍵字的形式傳入 def db_type(self, connection): """ 返回真正的資料型別及各種約束條件 :param connection: :return: """ return 'char(%s)' % self.max_length
自定義欄位的使用
myfield = MyCharField(max_length=16,null=True)
外來鍵欄位及引數
null
用於表示某個欄位可以為空。
unique
如果設定為unique=True 則該欄位在此表中必須是唯一的 。
db_index
如果db_index=True 則代表著為此欄位設定索引。
default
為該欄位設定預設值。
DateField和DateTimeField
auto_now_add
配置auto_now_add=True,建立資料記錄的時候會把當前時間新增到資料庫。
auto_now
配置上auto_now=True,每次更新資料記錄的時候會更新該欄位。
關係欄位
ForeignKey
外來鍵型別在ORM中用來表示外來鍵關聯關係,一般把ForeignKey欄位設定在 '一對多'中'多'的一方。
ForeignKey可以和其他表做關聯關係同時也可以和自身做關聯關係。
舉例:
ForeignKey(unique=True) === OneToOneField()
欄位引數
to
設定要關聯的表
to_field
設定要關聯的表的欄位
on_delete
當刪除關聯表中的資料時,當前表與其關聯的行的行為。
models.CASCADE
刪除關聯資料,與之關聯也刪除
db_constraint
是否在資料庫中建立外來鍵約束,預設為True。
注意:djang2.x 及以上的版本,需要自己指定外來鍵欄位的級聯更新級聯刪除。
models.DO_NOTHING
刪除關聯資料,引發錯誤IntegrityError
models.PROTECT
刪除關聯資料,引發錯誤ProtectedError
models.SET_NULL
刪除關聯資料,與之關聯的值設定為null(前提FK欄位需要設定為可空)
models.SET_DEFAULT
刪除關聯資料,與之關聯的值設定為預設值(前提FK欄位需要設定預設值)
models.SET
刪除關聯資料,
a. 與之關聯的值設定為指定值,設定:models.SET(值)
b. 與之關聯的值設定為可執行物件的返回值,設定:models.SET(可執行物件)
OneToOneField
一對一欄位。
通常一對一欄位用來擴充套件已有欄位。(通俗的說就是一個人的所有資訊不是放在一張表裡面的,簡單的資訊一張表,隱私的資訊另一張表,之間通過一對一外來鍵關聯)
欄位引數
to
設定要關聯的表。
to_field
設定要關聯的欄位,預設不寫就是關聯另外一張表的主鍵欄位。
on_delete
當刪除關聯表中的資料時,當前表與其關聯的行的行為。(參考上面的例子)