在model中添加字段的格式一般為: field_name = field_type(**field_options)
代碼示例
from django.db import models
from wagtail.core.models import Page
from wagtail.core.fields import RichTextField
from wagtail.admin.edit_handlers import FieldPanel
class HomePage(Page):
body = RichTextField(blank=True)
content_panels = Page.content_panels + [
FieldPanel('body', classname="full"),
]
這次主要對body = RichTextField(blank=True) 進行分析,body為對象HomePage的屬性,同時body也是對象瘪弓,在上述代碼中定義為RichTextField,且option設置為blank=True
關于feild的options和types
feild為樣式對象策精,options為選項,RichTextField就是field的其中一種(wagtile特有的)
options
1. Field.null
- bool型,null選項趟据,默認為False冗酿,空字符串埠对,若為真,則為null
2. Field.blank
- bool型裁替,空白選項糖声,默認為False歌豺,即要求Feild不得為空白衅斩,反之可以允許空白內容
3. Field.choices
- 只要對象屬性里含有長度>=2的list或tuple勘伺,就會自動生成一個選擇器,如:
YEAR_IN_SCHOOL_CHOICES = (
('FR', 'Freshman'),
('SO', 'Sophomore'),
('JR', 'Junior'),
('SR', 'Senior'),
)
當然,也可以是多層級嵌套的
4.Field.db_column
- 數據庫字段名开伏。字段名默認為屬性名膀跌,否則為指定的名字
5.Field.db_index
- bool型,默認為False硅则,若為True淹父,則為改屬性在數據庫添加索引
6.Field.db_tablespace
- 數據庫對應表的空間大小。默認為setting里的DEFAULT_INDEX_TABLESPACE
7.Field.default
- Field的默認值怎虫,可以為一個callable對象暑认,即每次調用該feild時都會回調一個對象
8.Field.editable
- 默認為True,即可編輯大审。設置為False時在后臺admin無法展現(xiàn)出來
9.Field.error_messages
- 設置跳過的錯誤信息蘸际,可設置值有null, blank, invalid, invalid_choice, unique, and unique_for_date
10.Field.help_text
- 給裝飾器添加注釋,如:
help_text="Please use the following format: <em>YYYY-MM-DD</em>."
11.Field.primary_key
- 主鍵徒扶,Django會自動添加
AutoField
來設置primary_key=True粮彤。
primary_key=True意味著null=False and unique=True.
12.Field.unique
- 默認為False,True時則feild必須唯一姜骡,不唯一時會報錯django.db.IntegrityError
13.Field.unique_for_date
- 設置日期主鍵导坟,還有unique_for_month、unique_for_year等
14.Field.verbose
- 人工field名圈澈,若無則Django自動創(chuàng)建
15.Field.validators
Field types
即對象的一些樣式
1.AutoField()
- 根據已有id自增長的整形唯一字段惫周,一般每個model類不需設置該字段,因為django會為每個model自動設置康栈。django默認會為每個model類添加如下語句:
id = models.AutoField(primary_key=True)
當其他字段添加了primary_key屬性递递,則不會創(chuàng)建id字段了。每個model類僅能有一個主鍵
2.BooleanField()
- 布爾型字段啥么,默認的表單窗口部件是CheckBoxInput
3.CharField()
- 字符型字段登舞,默認的表單窗口部件是TextInput。該字段類型有一個必需參數:max_length 在數據庫水平限定了字符串最大長度
4.DateField()
- 字段的值是python中datetime.date的實例悬荣,默認的表單窗口是TextInput有幾個可選的參數:
auto_now=True/False:當設置為True時菠秒,每當該對象使用save()時,該字段的值就會被更新氯迂。
auto_now_add=True/False: 當設置為True時践叠,該字段的值為該對象被創(chuàng)建時的日期
5.DateTimeField()
- 日期和時間字段,值為datetime.datetime實例囚戚。默認的表單窗口以及可選參數同上
6.DecimalField()
- 混合精度的小數型數字字段酵熙。有兩個必需的參數:
max_digits=ingt_number:限定數字的最大位數(包含小數位)
decimal_places=int_number:存儲數字的小數位
7.EmailField(max_length=254, **options)
- 郵件字段轧简,使用EmailValidator進行驗證
8.FileField(upload_to=None, max_length=100, **options)
這個字段不能設置primary_key和unique選項.在數據庫中存儲類型是varchar驰坊,默認最大長度為100.
有兩個可選參數:
upload_to如果使用默認的FileSystomStorage,文件將會存儲到settings文件中配置的MEDIA_ROOT路徑中哮独。
upload_to的值也可以為可調用對象,通過調用這個對象可以獲得上傳路徑拳芙。
instance=: 定義了FileField的模型實例
filename='': 文件名稱察藐。
9.FilePathField(path=None, match=None, recursive=False, max_length=100, **options)
這個字段的值被限制在系統(tǒng)上某個目錄中的所有文件名集合中。有三個參數
path='': 該參數必需舟扎。上行所說的‘某個目錄’的絕對路徑分飞。Example: "/home/images".
recursive=True/False: 可選參數,默認為False睹限。設定是否遞歸該目錄下所有子目錄的所有文件譬猫。
match='pattern': 可選參數。格式是正則表達式羡疗。用來揀選符合匹配正則表達式的文件
10.FloatField()
- 浮點字段染服,默認的表單窗口部件是NumberInput。和DecimalField經尺逗蓿混淆不清柳刮,F(xiàn)loatField在內部使用Python中的float對象,而DecimalField在內部使用Python中的decimal對象痒钝。
11.ImageField(upload_to=None, height_field=None, width_field=None, max_length=100, **options)
- 圖像字段秉颗。繼承了FileField的所有屬性和方法。而且還能自動驗證上傳的對象是否為合法的圖像送矩。
12.IntegerField()
- 整形字段
13.GenericIPAddressField(protocol='both', unpack_ipv4=False, **options)
- ip地址字段蚕甥,protocol='both/ipv4/ipv6' 默認為both
14.NullBooleanField ()
- 類似于BooleanField,不同的是其允許值為null
15.TextField()
- 與CharField類似益愈,但一般用來存儲體積較大的文本梢灭。
16.TimeField(auto_now=False, auto_now_add=False, **options)
- 時間字段,其值為datetime.time實例
16.URLField(max_length=200, **options)
- URL字段蒸其。類似于CharField的子類敏释,默認最大長度為200.