1. 程式人生 > >Django之models模塊

Django之models模塊

protocol 場景 列表 eric admin mixin 劃線 eight 分數

一、字段

1、 AutoField(Field) int自增列,必須填入參數 primary_key=True

2、BigAutoField(AutoField) bigint自增列,必須填入參數 primary_key=True

註意:當model中如果沒有自增列,則自動會創建一個列名為id的列

3、SmallIntegerField(IntegerField) 小整數 -32768 ~ 32767

4、PositiveSmallIntegerField(PositiveIntegerRelDbTypeMixin, IntegerField) 正小整數 0 ~ 32767

5、IntegerField(Field) 整數列(有符號的) -2147483648 ~ 2147483647

6、PositiveIntegerField(PositiveIntegerRelDbTypeMixin, IntegerField) 正整數 0 ~ 2147483647

7、BigIntegerField(IntegerField) 長整型(有符號的) -9223372036854775808 ~ 9223372036854775807

8、BooleanField(Field) 布爾值類型

9、NullBooleanField(Field) 可以為空的布爾值

10、CharField(Field) 字符類型

必須提供max_length參數, max_length表示字符長度

11、TextField(Field) 文本類型

12、EmailField(CharField) 字符串類型

Django Admin以及ModelForm中提供驗證機制(即郵件字段,可以驗證輸入郵件格式是否正確)

13、IPAddressField(Field) 字符串類型

Django Admin以及ModelForm中提供驗證 IPV4 機制(即ip字段,可以驗證輸入IP是否正確)

14、GenericIPAddressField(Field) 字符串類型

Django Admin以及ModelForm中提供驗證 Ipv4和Ipv6

參數:

protocol:用於指定Ipv4或Ipv6,其值為:‘both‘,"ipv4","ipv6"

unpack_ipv4:如果指定為True,則輸入::ffff:10.0.0.1時候,可解析為10.0.0.1,開啟刺功能,需要protocol="both"

15、URLField(CharField) 字符串類型(即郵件字段,可以驗證輸入的url否是一個合法url)

Django Admin以及ModelForm中提供驗證 URL

16、SlugField(CharField) 字符串類型

Django Admin以及ModelForm中提供驗證支持 字母、數字、下劃線、連接符(減號)

17、CommaSeparatedIntegerField(CharField) 字符串類型

格式必須為逗號分割的數字

18、UUIDField(Field) 字符串類型

Django Admin以及ModelForm中提供對UUID格式的驗證

19、FilePathField(Field) 字符串類型

Django Admin以及ModelForm中提供讀取文件夾下文件的功能

參數:

path:文件夾路徑

match=None:正則匹配

recursive=False:遞歸下面的文件夾

allow_files=True:允許文件

allow_folders=False:允許文件夾

20、FileField(Field) 字符串類型

路徑保存在數據庫,文件上傳到指定目錄

參數:

upload_to = "" 上傳文件的保存路徑

storage = None 存儲組件,默認django.core.files.storage.FileSystemStorage

21、ImageField(FileField) 字符串類型

路徑保存在數據庫,文件上傳到指定目錄

參數:

upload_to = "" 上傳文件的保存路徑

storage = None 存儲組件,默認django.core.files.storage.FileSystemStorage

width_field=None 上傳圖片的高度保存的數據庫字段名(字符串)

height_field=None 上傳圖片的寬度保存的數據庫字段名(字符串)

22、DateTimeField(DateField)

日期+時間格式 YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ]

23、DateField(DateTimeCheckMixin, Field)

日期格式 YYYY-MM-DD

24、TimeField(DateTimeCheckMixin, Field)

時間格式 HH:MM[:ss[.uuuuuu]]

#日期字段常用的參數

auto_now:這個參數的默認值為false,設置為true時,能夠在保存該字段時,將其值設置為當前時間,並且每次修改model,都會自動更新。因此這個參數在需要存儲"最後修改時間"的場景下,十分方便。需要註意的是,設置該參數為true時,並不簡單地意味著字段的默認值為當前時間,而是指字段會被"強制"更新到當前時間,你無法程序中手動為字段賦值;如果使用django再帶的admin管理器,那麽該字段在admin中是只讀的。

auto_now_add:這個參數的默認值也為False,設置為True時,會在model對象第一次被創建時,將字段的值設置為創建時的時間,以後修改對象時,字段的值不會再更新。該屬性通常被用在存儲"創建時間"的場景下。與auto_now類似,auto_now_add也具有強制性,一旦被設置為True,就無法在程序中手動為字段賦值,在admin中字段也會成為只讀的

25、DurationField(Field) 長整數,時間間隔,數據庫中按照bigint存儲,ORM中獲取的值為datetime.timedelta類型

26、FloatField(Field) 浮點型

27、DecimalField(Field) 十進制小數

參數:

max_digits 小數總長度

decimal_places 小數位長度

28、BinaryField(Field) 二進制類型

29、models.ForeignKey(other_table) 創建外鍵(即創建一對多的表的關聯)

參數:

to=: 要進行關聯的表名

to_field=: 要關聯的表中的字段名稱

on_delete=: 當刪除關聯表中的數據時,當前表與其關聯的行的行為

on_delete的參數:

- models.CASCADE 刪除關聯數據,與之關聯也刪除

- models.DO_NOTHING 刪除關聯數據,引發錯誤IntegrityError

- models.PROTECT 刪除關聯數據,引發錯誤ProtectedError

- models.SET_NULL 刪除關聯數據,與之關聯的值設置為null(前提FK字段需要設置為可空)

- models.SET_DEFAULT 刪除關聯數據,與之關聯的值設置為默認值(前提FK字段需要設置默認值)

- models.SET 刪除關聯數據

30、models.ManyToManyField(other_table) 創建多對多的表的關聯

31、models.OneToOneField(other_table) 創建一對一的關聯

二、字段公用參數

null 數據庫中字段是否可以為空

db_column 數據庫中字段的列名

db_tablespace 表空間,如果該字段已經創建了索引,那麽數據庫表空間的名稱將作為該字段的索引名。註意,部分數據庫不支持表空間

default 數據庫中字段的默認值

primary_key 數據庫中字段是否為主鍵

db_index 數據庫中字段是否可以建立索引

unique 數據庫中字段是否可以建立唯一索引

unique_for_date 數據庫中字段【日期】部分是否可以建立唯一索引

unique_for_month 數據庫中字段【月】部分是否可以建立唯一索引

unique_for_year 數據庫中字段【年】部分是否可以建立唯一索引

verbose_name Admin中顯示的字段名稱

blank Admin中是否允許用戶輸入為空

editable Admin中是否可以編輯

help_text Admin中該字段的提示信息

choices Admin中顯示選擇框的內容,用不變動的數據放在內存中從而避免跨表操作

如:course = models.IntegerField(choices=[(0, ‘雲計算‘),(1, ‘Linux‘),],default=1)

error_messages 自定義錯誤信息(字典類型)從而,定制想要顯示的錯誤信息

字典健:null, blank, invalid, invalid_choice, unique, and unique_for_date

如:{‘null‘: "不能為空.", ‘invalid‘: ‘格式錯誤‘}

validators 自定義錯誤驗證(列表類型),從而定制想要的驗證規則(例子如下)

from django.core.validators import RegexValidator
from django.core.validators import EmailValidator,URLValidator,DecimalValidator,MaxLengthValidator,MinLengthValidator,MaxValueValidator,MinValueValidator
test = models.CharField(
    max_length=32,
    error_messages={
        error1: 錯誤信息1,
        error2: 錯誤信息2,
        error3: 錯誤信息3,
    },
    validators=[
        RegexValidator(regex=root_\d+, message=出錯誤了, code=e1),
        RegexValidator(regex=root_hehe\d+, message=又出錯誤了, code=e2),
        EmailValidator(message=又又出錯誤了, code=e3), 
    ]
)

Django之models模塊