10 ORM 基礎欄位及選項

2022-09-12 12:42:14 字數 4668 閱讀 8687

一、orm-基礎欄位及選項

任何關於表結構的修改,務必在對應模型類上修改

例如 給 books_book表新增乙個info欄位 varchar(100)

1.在模型中新增對應的類屬性

2.執行資料庫遷移

二、常用字段型別

booleanfield()

資料庫型別:tinyint(1)

程式語言中使用true/false 來表示值

資料庫中使用1/0來表示具體的值

charfield()

資料庫型別:varchar

注意:必須指定max_length最大引數值

datefield()

資料庫型別:date

作用:表示日期

引數: 1.auto_now:每次儲存物件時,自動設定該字段為當前時間(取值:true/false)

2.auto_now_add:當物件第一次被建立時自動設定當前時間(取值:true/false)

3.default:設定當前時間(取值:字串格式時間如:'

2022-01-01')

ps:以上三個引數只能多選一

datetimefield()

資料庫型別:datatime(6)

作用:表示日期和時間

引數同datefield

floatfield()

資料庫型別:double

程式語言和資料庫中都使用小數表示

decimalfield()

資料庫型別:decimal(x,y)

程式語言中使用小數表示該列的值

在資料庫中:使用小數

引數: max_digits:位總數,包括小數點後的位數,該值必須大於等於decimal_places

decimal_places:小數點後的數字數量

emailfield()

資料庫型別:varchar

只存email,可以檢查對應格式

程式語言和資料庫中使用字串

intgerfield()

資料庫型別:int

程式語言和資料庫中使用整數

imagefiled()

資料庫型別:varchar(100)

作用:在資料庫中味了儲存的路徑

程式語言和資料庫中使用字串

textfield()

資料庫型別:longtext

作用:表示不定長字元資料

官方文件:

三、模型類-欄位選項

官方文件:#

field-options

字段選項:指定建立的列的額外資訊

允許出現多個字段選項,多個字段選項用逗號隔開

primary_key:如果設定為true表示該列為主鍵,如果指定乙個字段為主鍵,則此資料表不會建立id欄位

blank:設定為true時,字段可以為空,設定為false時,字段必須填寫

null:如果設定為true,表示該列值允許為空,預設是false,是false的時候建議加入default選項設定預設值

default:設定所在列的預設值

db_index:如果設定為true,表示為該列增加索引

unique:如果設定為true,表示該字段在資料庫中的值必須是唯一的

db_column:指定列的名稱,如果不指定的話採用屬性名作為列名

verbose_name:設定次字段在admin介面上的顯示名稱

字段選項樣例

四、模型類-meta類

定義:使用內部meta類來給模型賦予屬性,meta類下有很多內建的類屬性,可以對模型類做一些控制

語法:

class

model_name(models.model):

欄位...

class

meta:

字段

示例:

'db_table

db_table是用於指定自定義資料庫表名的。django有一套預設的按照一定規則生成資料模型對應的資料庫表名,如果你想使用自定義的表名,就通過這個屬性指定,比如:

table_name='

my_owner_table'_

' +module_name 作為表的名字.

若你的表的名字是乙個 sql 保留字, 或包含 python 變數名不允許的字元--特別是連字元 --沒關係. django 會自動在幕後替你將列名字和表名字用引號引起來.

db_tablespace

有些資料庫有資料庫表空間,比如oracle。你可以通過db_tablespace來指定這個模型對應的資料庫表放在哪個資料庫表空間。

get_latest_by

由於django的管理方法中有個lastest()方法,就是得到最近一行記錄。如果你的資料模型中有 datefield 或 datetimefield 型別的字段,你可以通過這個選項來指定lastest()是按照哪個字段進行選取的。

乙個 datefield 或 datetimefield 欄位的名字. 若提供該選項, 該模組將擁有乙個 get_latest() 函式以得到

"最新的

"物件(依據那個字段):

get_latest_by = "

order_date

"managed

由於django會自動根據模型類生成對映的資料庫表,如果你不希望django這麼做,可以把managed的值設定為false。

預設值為true,這個選項為true時django可以對資料庫表進行 migrate或migrations、刪除等操作。在這個時間django將管理資料庫中表的生命週期

如果為false的時候,不會對資料庫表進行建立、刪除等操作。可以用於現有表、資料庫檢視等,其他操作是一樣的。

order_with_respect_to

這個選項一般用於多對多的關係中,它指向乙個關聯物件。就是說關聯物件找到這個物件後它是經過排序的。指定這個屬性後你會得到乙個get_***_order()和set_***_order()的方法,通過它們你可以設定或者回去排序的物件。

舉例來說, 如果乙個 pizzatoppping 關聯到乙個 pizza 物件, 這樣做:

order_with_respect_to = '

pizza

'...就允許 toppings 依照相關的 pizza 來排序.

ordering

這個欄位是告訴django模型物件返回的記錄結果集是按照哪個字段排序的。比如下面的**:

ordering=['

order_date']

#按訂單公升序排列

ordering=['

-order_date']

#按訂單降序排列,-表示降序

ordering=['

?order_date']

#隨機排序,?表示隨機

ordering = ['

-pub_date

', '

author']

#對 pub_date 降序,然後對 author 公升序

需要注意的是:不論你使用了多少個字段排序, admin 只使用第乙個字段

permissions

permissions主要是為了在django admin管理模組下使用的,如果你設定了這個屬性可以讓指定的方法許可權描述更清晰可讀。

要建立乙個物件所需要的額外的許可權. 如果乙個物件有 admin 設定, 則每個物件的新增,刪除和改變許可權會人(依據該選項)自動建立.下面這個例子指定了乙個附加許可權: can_deliver_pizzas:

permissions = (("

can_deliver_pizzas

", "

can deliver pizzas

"),)

這是乙個2-元素 tuple 的tuple或列表, 其中兩2-元素 tuple 的格式為:(permission_code, human_readable_permission_name).

unique_together

unique_together這個選項用於:當你需要通過兩個字段保持唯一性時使用。這會在 django admin 層和資料庫層同時做出限制(也就是相關的 unique 語句會被包括在 create table 語句中)。比如:乙個person的firstname和lastname兩者的組合必須是唯一的,那麼需要這樣設定:

unique_together = (("

first_name

", "

last_name

"),)

verbose_name

verbose_name的意思很簡單,就是admin後台給你的模型類起乙個更可讀的名字:

verbose_name = "

pizza

"若未提供該選項, django 則會用乙個類名字的 munged 版本來代替: camelcase becomes camel case.

verbose_name_plural

這個選項是指定,模型的複數形式是什麼,比如:

verbose_name_plural = "

stories

"若未提供該選項,admin後台 會使用 verbose_name + "s".

ORM相關字段,引數及資料庫遷移

1.charfield,integerfield,autofield,emailfield,textfield textarea booleanfield checkbox datetimefield 類似datefield 2.floatfield 引數 max digits 總位數 不包括小數點...

Django模型中常用的字段型別及選項整理

常用字段型別 模型欄位名 說明mysql對應欄位名 autofield 自增字段,如果沒有指定將自動新增乙個名為 id 的自增主鍵字段 int 11 integerfield 整數字段 intbigintegerfield 類似於integerfield,乙個64位的整數 bigint smalli...

6DjangoORM模型類總的基礎欄位及字段選項

一,熟悉djangoorm模型層 django使用mysql資料庫首先需要安裝pymysql驅動和mysqlclient,然後還需在django工程同名的子目錄init.py檔案中新增如下語句,即 讓pymysql以mysqldb的執行模式和django的orm對接執行 from pymysql i...