1. 程式人生 > >django的models模型類的常用數據類型和選項

django的models模型類的常用數據類型和選項

布爾類型 tex etime int 讓我 字符 ace bsp www.

django框架的models模塊ORM框架,能夠讓我們通過編寫類的方式,幫助我們自動生成數據庫表。

生成的數據庫表名為 應用模塊名稱_類名

數據庫表中字段名 如果我們沒有在參數中指定,就是我們寫的類屬性名。

通過編寫類屬性的方式,我們可以創建數據庫表。

1 首先編寫類:

  稍後詳細

2 然後生成遷移文件:

python manage.py makemigrations

3 執行遷移:

python manage.py migrate

三步驟,django會幫助我們生成相應的sql語句創建數據庫表。

創建的過程的sql語句可以從mysql的日誌文件中看到。

查看日誌文件方法參考 http://www.cnblogs.com/Lin-Yi/p/7515432.html

編寫模型類:

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

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

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

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

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

屬性命名限制:

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

字段類型控制:
首先導入 import django.db.models

  • AutoField:自動增長的IntegerField,通常不用指定,不指定時Django會自動創建屬性名為id的自動增長屬性。
  • BooleanField:布爾字段,值為True或False。
  • NullBooleanField:支持Null、True、False三種值。
  • CharField(max_length=字符長度):字符串。
    • 參數max_length表示最大字符個數。
  • TextField:大文本字段,一般超過4000個字符時使用。
  • IntegerField:整數。
  • DecimalField(max_digits=None, decimal_places=None):十進制浮點數。
    • 參數max_digits表示總位數。
    • 參數decimal_places表示小數位數。
  • FloatField:浮點數。
  • DateField[auto_now=False, auto_now_add=False]):日期。
    • 參數auto_now表示每次保存對象時,自動設置該字段為當前時間,用於"最後一次修改"的時間戳,它總是使用當前日期,默認為false。
    • 參數auto_now_add表示當對象第一次被創建時自動設置當前時間,用於創建的時間戳,它總是使用當前日期,默認為false。
    • 參數auto_now_add和auto_now是相互排斥的,組合將會發生錯誤。
  • TimeField:時間,參數同DateField。
  • DateTimeField:日期時間,參數同DateField。
  • FileField:上傳文件字段。
  • ImageField:繼承於FileField,對上傳的內容進行校驗,確保是有效的圖片。

關系:
  1 一對多關系
    models.ForignKey() 外鍵約束
    定義在多類中
  2 多對多關系
    models.ManyToManyField()
    定義在哪一個都行

  3 一對一關系
    models.OntoOneField()
    定義在哪一個類都可以

選項

通過選項實現對字段的約束,選項如下:

  • null:如果為True,表示允許為空,默認值是False。
  • blank:如果為True,則該字段允許為空白,默認值是False。
  • 對比:null是數據庫範疇的概念,blank是表單驗證證範疇的。
  • db_column:字段的名稱,如果未指定,則使用屬性的名稱。
  • db_index:若值為True, 則在表中會為此字段創建索引,默認值是False。
  • default:默認值。
  • primary_key:若為True,則該字段會成為模型的主鍵字段,默認值是False,一般作為AutoField的選項使用。
  • unique:如果為True, 這個字段在表中必須有唯一值,默認值是False。

舉例:

# 我的應用模塊名為test
# 會在數據庫中建立 test_bookinfo表
class BookInfo(models.Model):
    btitle = models.CharField(max_length=20)    #字段btitle 字符串類型
    bpub_date = models.DateField(auto_now_add=True) # date類型字段
    bread = models.IntegerField(default= 0 )    #整數類型字段
    bcomment = models.IntegerField(default= 0) # 整數類型字段
    isDelete = models.BooleanField(default=False)   # 布爾類型字段
btype = models.ForeignKey("TypeInfo")  #進行外鍵約束 每條消息都所屬某一個typeinfo

django的models模型類的常用數據類型和選項