django model

field選項連接html


model field 類型python

[AutoField,mysql

BigintegerField,git

BinaryField,web

BooleanField,sql

CharField,數據庫

CommaSeparatedIntegerField,django

DataField,安全

DataTimeField,app

DecimalField,

EmailField,

FileField,

FloatField,

ImageField,

IntegerField,

IPAddressField,

TextField,

URLField,

ForeignKey / ManyToManyField / OneToOneField / SmallIntegerField / SlugField / PositiveSmallIntegerField / PositiveIntegerField

]

Field 選項

[null,

blank,

choices,

db_column,

db_index,

default,

editable,

error_messages,

help_text, 

primary_key,

radio_admin,

unique, 

unique_for_date, 

unique_for_month, 

unique_for_year,

verbose_name, 

validators]


一、AutoField

     一個自增的IntegerField,通常不直接使用,Django會自動給每張表添加一個自增的primary key。


二、BigIntegerField

    64位整數, -9223372036854775808 到 9223372036854775807。默認的顯示widget 是 TextInput.


三、BinaryField ( Django 1.6 版本新增 )

    存儲二進制數據。不能使用 filter 函數得到 QuerySet


四、BooleanField

    True/False,默認的widget 是 CheckboxInput。

若是須要置空,則必須用 NullBooleanField 代替。

Django 1.6 修改:BooleanField 的默認值 由 False 改成 None,在 default 屬性未設置的狀況下。


五、CharField

    存儲字符串。必須有 max_length 參數指定長度。默認的form widget 是 TextInput

若是字符串巨長,推薦使用 TextField。


六、CommaSeparatedIntegerField

    一串由逗號分開的整數。必須有 max_length 參數。


七、DateField

    日期,與python裏的datetime.date 實例同。有如下幾個可選的選項,均爲bool類型:

     DateField.auto_now: 每次執行 save 操做的時候自動記錄當前時間,常做爲最近一次修改的時間 使用。注意:老是在執行save 操做的時候執行,沒法覆蓋。

 DateField.auto_now_add: 第一次建立的時候添加當前時間。常做爲 建立時間 使用。注意:每次create 都會調用。

默認的form widget 是 TextInput。

注意:設置auto_now 或者 auto_now_add 爲 True 會致使當前自動擁有 editable=False 和 blank = True 設置。


八、DateTimeField

    日期+時間。與python裏的 datetime.datetime 實例同。經常使用附加選項和DateField同樣。

默認 form widget 是一個 TextInput


九、DecimalField

    設置了精度的十進制數字。

A fixed-precision decimal number, represented in Python by a Decimal instance. Has two required arguments:

DecimalField.max_digits

The maximum number of digits allowed in the number. Note that this number must be greater than or equal to decimal_places.

DecimalField.decimal_places?

The number of decimal places to store with the number.

For example, to store numbers up to 999 with a resolution of 2 decimal places, you’d use:

models.DecimalField(..., max_digits=5, decimal_places=2)

And to store numbers up to approximately one billion with a resolution of 10 decimal places:

models.DecimalField(..., max_digits=19, decimal_places=10)

The default form widget for this field is a TextInput.


十、EmailField

    在 CharField 基礎上附加了 郵件地址合法性驗證。不須要強制設定 max_length

注意:當前默認設置 max_length 是 75,雖然已經不符合標準,但未了向前兼容,未修改。

十一、FileField

    文件上傳。不支持 primary_key 和 unique 選項。不然會報 TypeError 異常。

必須設置 FileField.upload_to 選項,這個是 本地文件系統路徑,附加在 MEDIA_ROOT 設置的後邊,也就是 MEDIA_ROOT 下的子目錄相對路徑。

默認的form widget 是 FileInput。

使用 FileField 和 ImageField 須要如下步驟:

    (1)修改 settting.py,設置 MEDIA_ROOT(使用絕對路徑),指定用戶上傳的文件保存在哪裏。設置 MEDIA_URL,做爲 web地址 前綴,要保證 MEDIA_ROOT 目錄對運行 Django 的用戶是可寫的;

(2)在 model 中增長 FileField 或 ImageField,並指定 upload_to 選項指定存在 MEDIA_ROOT 的哪一個子目錄裏; 

(3)存在數據庫裏的是什麼東西呢?是 File 或 Image相對於 MEDIA_ROOT 的相對路徑,你能夠在 Django 裏方便的使用這個地址,好比你的 ImageField 叫 tupian,你能夠在 template 中用{{object.tupian.url}}。

舉個例子:假設你的 MEDIA_ROOT='/home/media',upload_to 設置爲 'photos/%Y/%m/%d','%Y/%m/%d' 部分使用strftime() 提供。若是你在 2013年10月10日上傳了一個文件,那麼它就存在 /home/media/photos/2013/10/10/ 下。

文件在 model實例 執行 save操做的同時保存,因此文件在model實例執行save以前,硬盤的上的文件名的是不可靠的。

注意:要驗證用戶上傳的文件確實是本身須要的,以防止安全漏洞出現。

默認狀況下,FileField 在數據庫中表現爲 varchar(100) 的一個列。你可使用 max_length 來改變這個大小。

十一、FileField 和 FieldFile

    當你訪問 一個 model 內的 FileField 時,將獲得一個 FieldFile 實例來訪問實際的文件。這個類提供了幾個屬性和方法用來和實際的文件數據交互:

FieldFile.url:只讀屬性,獲取文件的相對URL地址;

FieldFile.open( mode = 'rb' ):打開文件,和python 的 open 同樣;

FieldFile.close():和 python 的 file.close() 同樣;

FieldFile.save( name, content, save=True ):name 是文件名,content 是包含了文件內容的 django.core.files.File 實例,與 python 的 file 不同。The optional save argument controls whether or not the instance is saved after the file has been altered. Defaults to True。

兩種方式 進行 content 設置:

from django.core.files import File

f = open( 'helo.txt' )

content = File(f)

另外一種是:

from django.core.files.base import ContentFile

content = ContentFile( 'helloworld' )

更多內容可見:https://docs.djangoproject.com/en/dev/topics/files/

FieldFile.delete( save = True ):刪除當前的文件。若是文件已經打開,則自動關閉。The optional save argument controls whether or not the instance is saved after the file has been deleted. Defaults to True.

值得注意的是:當一個 model實例 被刪除以後,相關聯的文件並無被刪除,須要本身清除!


十二、FloatField

    與 python 裏的 float 實例相同,默認的 form widget 是 TextInput。

雖然 FloatField 與 DecimalField 都是表示實數,但倒是不一樣的表現形式,FloatField 用的是 python d float 類型,可是 DecimalField 用的倒是 Decimal 類型。區別可見:http://docs.python.org/2.7/library/decimal.html#decimal

1三、ImageField

    在 FileField 基礎上加上是不是合法圖片驗證功能的一個類型。

除了 FileField 有的屬性外,ImageField 另有 height 和 width 屬性。

To facilitate querying on those attributes, ImageField has two extra optional arguments:


ImageField.height_field

Name of a model field which will be auto-populated with the height of the image each time the model instance is saved.


ImageField.width_field

Name of a model field which will be auto-populated with the width of the image each time the model instance is saved.


注意:須要安裝 PIL 或者 Pillow 模塊。在數據庫中一樣表現爲 varchar(100),可經過 max_length 改大小。

1四、IntegerField

    整數,默認的form widget 是 TextInput。

1五、IPAddressField

    IP地址,字符串類型,如 127.0.0.1。默認 form widget 是 TextInput。

1六、TextField

    大文本,巨長的文本。默認的 form widget 是 Textarea。

注意,若是使用 MySQLdb 1.2.1p2 和 utf-8_bin 編碼,會有一些問題https://docs.djangoproject.com/en/dev/ref/databases/#mysql-collation。具體問題未分析,可自行避開。

1七、URLField

    加了 URL 合法性驗證的 CharField。

默認的 form widget 是 TextInput。

默認max_length=200,可修改。

1八、ForeignKey / ManyToManyField / OneToOneField / SmallIntegerField / SlugField / PositiveSmallIntegerField / PositiveIntegerField


Field 選項

null 

      boolean 值,缺省設置爲false。一般不將其用於字符型字段上,好比CharField,TextField上。字符型字段若是沒有值會返回空字符串。

blank

      boolean 值,該字段是否能夠爲空。若是爲假,則必須有值。

choices

     元組值,一個用來選擇值的2維元組。第一個值是實際存儲的值,第二個用來方便進行選擇。如SEX_CHOICES=((‘F’,’Female’),(‘M’,’Male’),)

db_column

      string 值,指定當前列在數據庫中的名字,不設置,將自動採用model字段名;

db_index 

      boolean 值,若是爲True將爲此字段建立索引;

default 

      給當前字段設定的缺省值,能夠是一個具體值,也能夠是一個可調用的對象,若是是可調用的對象將每次產生一個新的對象;

editable

      boolean 值,若是爲假,admin模式下將不能改寫。缺省爲真;

error_messages

      字典,設置默認的出錯信息,可覆蓋的key 有 null, blank, invalid, invalid_choice, 和 unique。

help_text

      admin模式下幫助文檔

      form widget 內顯示幫助文本。

primary_key

      設置主鍵,若是沒有設置django建立表時會自動加上:id = meta.AutoField(‘ID’, primary_key=True)

      primary_key=True implies blank=False, null=False and unique=True. Only one primary key is allowed on an object.

radio_admin

      用於 admin 模式下將 select 轉換爲 radio 顯示。只用於 ForeignKey 或者設置了choices

unique

      boolean值,數據是否進行惟一性驗證;

unique_for_date

      字符串類型,值指向一個DateTimeField 或者 一個 DateField的列名稱。日期惟一,以下例中系統將不容許title和pub_date兩個都相同的數據重複出現

      title = meta.CharField( maxlength=30, unique_for_date=’pub_date’ )

unique_for_month / unique_for_year

      用法同上

verbose_name

      string類型。更人性化的列名。

validators

        有效性檢查。無效則拋出 django.core.validators.ValidationError 異常。

如何實現檢查器 見:https://docs.djangoproject.com/en/dev/ref/validators/

相關文章
相關標籤/搜索