1. 程式人生 > 其它 >Django orm中常用欄位及引數

Django orm中常用欄位及引數

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

當刪除關聯表中的資料時,當前表與其關聯的行的行為。(參考上面的例子)