字段
對字段名稱的限制
- 字段名不能是Python的保留字,否則會導致語法錯誤
- 字段名不能有多個連續下劃線,否則影響ORM查詢操作
Django模型字段類
字段類 | 說明 |
---|---|
AutoField | 自增ID字段 |
BigIntegerField | 64位有符號整數 |
BinaryField | 存儲二進制數據的字段,對應Python的bytes類型 |
BooleanField | 存儲True或False |
CharField | 長度較小的字符串 |
DateField | 存儲日期,有auto_now和auto_now_add屬性 |
DateTimeField | 存儲日期和日期,兩個附加屬性同上 |
DecimalField | 存儲固定精度小數,有max_digits(有效位數)和decimal_places(小數點后面)兩個必要的參數 |
DurationField | 存儲時間跨度 |
EmailField | 與CharField相同,可以用EmailValidator驗證 |
FileField | 文件上傳字段 |
FloatField | 存儲浮點數 |
ImageField | 其他同FileFiled,要驗證上傳的是不是有效圖像 |
IntegerField | 存儲32位有符號整數。 |
GenericIPAddressField | 存儲IPv4或IPv6地址 |
NullBooleanField | 存儲True、False或null值 |
PositiveIntegerField | 存儲無符號整數(只能存儲正數) |
SlugField | 存儲slug(簡短標注) |
SmallIntegerField | 存儲16位有符號整數 |
TextField | 存儲數據量較大的文本 |
TimeField | 存儲時間 |
URLField | 存儲URL的CharField |
UUIDField | 存儲全局唯一標識符 |
字段屬性
通用字段屬性
選項 | 說明 |
---|---|
null | 數據庫中對應的字段是否允許為NULL,默認為False |
blank | 后臺模型管理驗證數據時,是否允許為NULL,默認為False |
choices | 設定字段的選項,各元組中的第一個值是設置在模型上的值,第二值是人類可讀的值 |
db_column | 字段對應到數據庫表中的列名,未指定時直接使用字段的名稱 |
db_index | 設置為True時將在該字段創建索引 |
db_tablespace | 為有索引的字段設置使用的表空間,默認為DEFAULT_INDEX_TABLESPACE |
default | 字段的默認值 |
editable | 字段在后臺模型管理或ModelForm中是否顯示,默認為True |
error_messages | 設定字段拋出異常時的默認消息的字典,其中的鍵包括null、blank、invalid、invalid_choice、unique和unique_for_date |
help_text | 表單小組件旁邊顯示的額外的幫助文本。 |
primary_key | 將字段指定為模型的主鍵,未指定時會自動添加AutoField用于主鍵,只讀。 |
unique | 設置為True時,表中字段的值必須是唯一的 |
verbose_name | 字段在后臺模型管理顯示的名稱,未指定時使用字段的名稱 |
ForeignKey屬性
- limit_choices_to:值是一個Q對象或返回一個Q對象,用于限制后臺顯示哪些對象。
- related_name:用于獲取關聯對象的關聯管理器對象(反向查詢),如果不允許反向,該屬性應該被設置為
'+'
,或者以'+'
結尾。 - to_field:指定關聯的字段,默認關聯對象的主鍵字段。
- db_constraint:是否為外鍵創建約束,默認值為True。
- on_delete:外鍵關聯的對象被刪除時對應的動作,可取的值包括django.db.models中定義的:
- CASCADE:級聯刪除。
- PROTECT:拋出ProtectedError異常,阻止刪除引用的對象。
- SET_NULL:把外鍵設置為null,當null屬性被設置為True時才能這么做。
- SET_DEFAULT:把外鍵設置為默認值,提供了默認值才能這么做。
ManyToManyField屬性
- symmetrical:是否建立對稱的多對多關系。
- through:指定維持多對多關系的中間表的Django模型。
- throughfields:定義了中間模型時可以指定建立多對多關系的字段。
- db_table:指定維持多對多關系的中間表的表名。
模型元數據選項
選項 | 說明 |
---|---|
abstract | 設置為True時模型是抽象父類 |
app_label | 如果定義模型的應用不在INSTALLED_APPS中可以用該屬性指定 |
db_table | 模型使用的數據表名稱 |
db_tablespace | 模型使用的數據表空間 |
default_related_name | 關聯對象回指這個模型時默認使用的名稱,默認為<model_name>_set |
get_latest_by | 模型中可排序字段的名稱。 |
managed | 設置為True時,Django在遷移中創建數據表并在執行flush管理命令時把表移除 |
order_with_respect_to | 標記對象為可排序的 |
ordering | 對象的默認排序 |
permissions | 創建對象時寫入權限表的額外權限 |
default_permissions | 默認為('add', 'change', 'delete') |
unique_together | 設定組合在一起時必須獨一無二的字段名 |
index_together | 設定一起建立索引的多個字段名 |
verbose_name | 為對象設定人類可讀的名稱 |
verbose_name_plural | 設定對象的復數名稱 |
查詢參考
按字段查找可以用的條件:
- exact / iexact:精確匹配/忽略大小寫的精確匹配查詢
- contains / icontains / startswith / istartswith / endswith / iendswith:基于
like
的模糊查詢 - in:集合運算
- gt / gte / lt / lte:大于/大于等于/小于/小于等于關系運算
- range:指定范圍查詢(SQL中的
between…and…
) - year / month / day / week_day / hour / minute / second:查詢時間日期
- isnull:查詢空值(True)或非空值(False)
- search:基于全文索引的全文檢索
- regex / iregex:基于正則表達式的模糊匹配查詢