Django之models模塊

1、字段

 

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

 

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

 

注意:當model中若是沒有自增列,則自動會建立一個列名爲id的列數據庫

 

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

 

四、PositiveSmallIntegerField(PositiveIntegerRelDbTypeMixin, IntegerField) 正小整數 0 ~ 32767雲計算

 

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

 

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

 

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

 

八、BooleanField(Field)        布爾值類型orm

 

九、NullBooleanField(Field)    能夠爲空的布爾值server

 

十、CharField(Field)        字符類型

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

 

十一、TextField(Field)        文本類型

 

十二、EmailField(CharField) 字符串類型

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

 

1三、IPAddressField(Field) 字符串類型

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

 

1四、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"

 

1五、URLField(CharField) 字符串類型(即郵件字段,能夠驗證輸入的url否是一個合法url)

       Django Admin以及ModelForm中提供驗證 URL

 

1六、SlugField(CharField) 字符串類型

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

 

1七、CommaSeparatedIntegerField(CharField) 字符串類型

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

 

1八、UUIDField(Field) 字符串類型

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

 

1九、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

 

2一、ImageField(FileField) 字符串類型

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

      參數:

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

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

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

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

 

2二、DateTimeField(DateField)

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

 

2三、DateField(DateTimeCheckMixin, Field)

       日期格式 YYYY-MM-DD

 

2四、TimeField(DateTimeCheckMixin, Field)

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

 

#日期字段經常使用的參數

auto_now:這個參數的默認值爲false,設置爲true時,可以在保存該字段時,將其值設置爲當前時間,而且每次修改model,都會自動更新。所以這個參數在須要存儲"最後修改時間"的場景下,十分方便。須要注意的是,設置該參數爲true時,並不簡單地意味着字段的默認值爲當前時間,而是指字段會被"強制"更新到當前時間,你沒法從程序中手動爲字段賦值;若是使用django再帶的admin管理器,那麼該字段在admin中是隻讀的。若是用django filter的update則是由於直接調用sql語句 不經過 model層, 因此不會自動更新帶有auto_now的字段,若是想更新字段;能夠經過update(..., update_time=datetime.datime.now())

 

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

 

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

 

2六、FloatField(Field)    浮點型

 

2七、DecimalField(Field) 十進制小數

       參數:

              max_digits           小數總長度

             decimal_places     小數位長度

 

2八、BinaryField(Field) 二進制類型

 

2九、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) 建立多對多的表的關聯

 

3一、models.OneToOneField(other_table)     建立一對一的關聯

 

2、字段公用參數

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'), ] )

3、表建立

一、簡單建立表

from django.db import models class ServerType(models.Model): serverName = models.CharField(max_length=32, unique=True

二、簡單表關聯

from django.db import models class ServerType(models.Model): serverName = models.CharField(max_length=32, unique=True) class Host(models.Model): hostname = models.CharField(max_length=32, unique=True) ip = models.GenericIPAddressField(protocol='ipv4') servertype = models.ForeignKey(to='ServerType',to_field='id',on_delete=models.CASCADE) detail = models.TextField() create_date = models.DateTimeField('建立日期', auto_now_add=True) mod_date = models.DateTimeField('更新日期', auto_now=True)

4、表操做

一、增

方式一

models.Host.objects.create(hostname='xx',ip='xx',...)  #增長一條數據,能夠接受字典類型數據 **kwargs

方式二

obj = models.Host(hostname='xx',ip='xx',...) obj.save()

二、刪

models.Host.objects.filter(hostname='xxx').delete()       #刪除指定條件的數據

三、改

models.Host.objects.filter(hostname='xx').update(ip='xxx')  #將指定條件的數據更新,均支持 **kwargs
  obj = models.Host.objects.get(id=1) obj.ip = 'xx' obj.save() #修改單條數據

四、查

models.Tb1.objects.get(id=1)                         # 獲取單條數據,不存在則報錯(不建議使用)
  models.Tb1.objects.all()                             # 獲取所有
  models.Tb1.objects.filter(name='seven').first()      # 獲取指定條件的數據
相關文章
相關標籤/搜索