Django框架(五):模型(一) 定義屬性


1. 定義屬性

Django根據屬性的類型確定以下信息:

  • 當前選擇的數據庫支持字段的類型
  • 渲染管理表單時使用的默認html控件
  • 在管理站點最低限度的驗證

django會為表創建自動增長的主鍵列,每個模型只能有一個主鍵列,如果使用選項設置某屬性為主鍵列后django不會再創建自動增長的主鍵列。

默認創建的主鍵列屬性為id,可以使用pk代替,pk全拼為primary key。

pk是主鍵的別名,若主鍵名為id2,那么pk是id2的別名。

屬性命名限制:

  • 不能是python的保留關鍵字。
  • 不允許使用連續的下划線,這是由django的查詢方式決定的,在第4節會詳細講解查詢。
  • 定義屬性時需要指定字段類型,通過字段類型的參數指定選項。

前面已經簡單的使用過了,只是沒有詳細介紹,語法:

屬性=models.字段類型(選項)

1.1 字段類型

(1) AutoField

自動增長的IntegerField,通常不用指定,不指定時Django會自動創建屬性名為id的自動增長屬性。

自定義一個主鍵:

my_id=models.AutoField(primary_key=True)

(2) BooleanField

布爾字段,值為True或False。

(3) NullBooleanField

類似BooleanField,支持Null、True、False三種值。

(4) CharField(max_length=字符長度)

字符串。

參數max_length表示最大字符個數。

(5) TextField

大文本字段,一般超過4000個字符時使用。

(6) IntegerField

整數。

(7) DecimalField(max_digits=None, decimal_places=None)

十進制浮點數。

參數max_digits表示總位數。

參數decimal_places表示小數位數。

(8) FloatField

浮點數。

(9) DateField[auto_now=False, auto_now_add=False])

日期。

參數auto_now表示每次保存對象時,自動設置該字段為當前時間,用於"最后一次修改"的時間戳,它總是使用當前日期,默認為false。

參數auto_now_add表示當對象第一次被創建時自動設置當前時間,用於創建的時間戳,它總是使用當前日期,默認為false。

參數auto_now_add和auto_now是相互排斥的,組合將會發生錯誤。

(10) TimeField

時間,參數同DateField。

(11) DateTimeField

日期時間,參數同DateField。

(12) FileField

上傳文件字段。

參數:upload_to,一個用於保存上傳文件的本地文件系統路徑。

(13) ImageField

繼承於FileField,對上傳的內容進行校驗,確保是有效的圖片。

有兩個可選參數:height_field和width_field。將圖片按照提供的高度和寬度規格保存。

(14) CommaSeparatedIntegerField(max_length)

逗號分隔開的整數字段。

參數與CharField一樣。

(15) FilePathField(path,[match],[recursive])

擁有多個可選項的字段,選項被限定為文件系統中某個目錄下的文件名。

(16) EmailField

能檢查值是否是有效的電子郵件地址的CharField。

(17) IPAddressField

IP地址,以字符串格式表示。

例如:"192.168.0.1"

(18) PhoneNumberField

檢查值是否是一個合法的美式電話格式。

(19) PositiveIntegerField

和IntegerField類似,但是必須是正值。

(20) SlugField

內容簡短的標簽,這段內容只能包含字母、數字、下划線或連字符。通常用於URL中。

(21) SmallIntegerField

和IntegerField類似,但是只允許在一個數據庫相關的范圍內的數值(通常是-32,768到+32,767)

(22) URLField

用來存儲URL的字段。

(23) USStateField

美國州名字縮寫,兩個字母。

(24) XMLField(schema_path)

類似TextField,只不過要檢查值是否匹配指定schema的合法XML。

1.2 選項

通過選項實現對字段的約束。

null:如果為True,表示允許為空,默認值是False。

blank:如果為True,則該字段允許為空白,默認值是False。

要注意,這與 null 不同。null純粹是數據庫范疇的,而blank是數據驗證范疇的。

如果一個字段的blank=True,表單的驗證將允許該字段是空值。如果字段的blank=False,該字段就是必填的。

db_column:字段的名稱,如果未指定,則使用屬性的名稱。

db_index:若值為True, 則在表中會為此字段創建索引,默認值是False。

default:默認值。

primary_key:若為True,則該字段會成為模型的主鍵字段,默認值是False,一般作為AutoField的選項使用。

unique:如果為True, 這個字段在表中必須有唯一值,默認值是False。

choices:一個包含雙元素元組的可迭代的對象,用於給字段提供選項。

editable:如果為False,這個字段在管理界面或表單里將不能編輯。默認為True。

help_text:在管理界面表單對象里顯示在字段下面的額外幫助文本。

radio_admin:默認的,對於ForeignKey或者擁有choices設置的字段,Django管理界面會使用列表選擇框(<select>)。如果radio_admin設置為True的話,Django就會使用單選按鈕界面。

unique_for_date:把它的值設成一個DateField或者DateTimeField的字段的名稱,可以確保字段在這個日期內不會出現重復值。

unique_for_month:和unique_for_date類似,只是要求字段在指定字段的月份內唯一。

unique_for_year:和unique_for_date以及unique_for_month類似,只是時間范圍變成了一年。

verbose_name:除ForeignKey、ManaToManyField和OneToOneField之外的字段都接受一個詳細名稱作為第一個位置參數。

1.3 簡單演示

#圖書類
class BookInfo(models.Model):
    '''圖書模型類'''
    # 圖書名稱
    btitle = models.CharField(max_length=20, db_column='title')
    # 圖書名字唯一
    # btitle = models.CharField(max_length=20, unique=True, db_index=True)
    # 價格,最大位數為10,小數為2
    # bprice = models.DecimalField(max_digits=10, decimal_places=2)
    # 出版日期
    bpub_date = models.DateField()
    # bpub_date = models.DateField(auto_now_add=True) # 創建時間
    # bpub_date = models.DateField(auto_now=True) # 更新時間
    # 閱讀量
    bread = models.IntegerField(default=0)
    # 評論量
    bcomment = models.IntegerField(default=0)
    # 刪除標記
    isDelete = models.BooleanField(default=False)

class RoleInfo(models.Model):
    '''角色人物模型類'''
    # 角色名
    rname = models.CharField(max_length=20)
    # 性別
    rgender = models.BooleanField(default=False)
    # 描述信息
    rcomment = models.CharField(max_length=200, null=True, blank=False)
    # 關系屬性
    rbook = models.ForeignKey('BookInfo',on_delete=models.CASCADE)
    # 刪除標記
    isDelete = models.BooleanField(default=False)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM