排序字段设计_「原创」第四章、模型设计
java進階架構師”,選擇右上角“置頂公眾號”
20大進階架構專題每日送達
模型設計
回顧
前三章我們可以算是一腳邁進了Django的大門(也稱入坑),因為程序員入坑第一步就是學會Hello World。希望你別驕傲,我們接下來才是真正的旅途——一起領略Django真正的迷人之處。
模型本質
現(xiàn)在,我們來學習模型,Django模型層是Django框架自定義的一套獨特的ORM(Object Relational Mapping,關系映射模型)技術。
模型本質上就是數(shù)據(jù)庫表的布局,再附加一些元數(shù)據(jù)。模型包含了你要在數(shù)據(jù)庫中創(chuàng)建的字段信息及對數(shù)據(jù)表的一些操作。
基本操作
想要操作模型,我們先來了解Django模型層的大概。使用Django模型開發(fā)的首要任務就是定義模型類及其屬性,每個模型的物理存在方式就是一個Python的類Class,每個模型代表數(shù)據(jù)庫中的一張表,每個類的實例代表數(shù)據(jù)表中的一行數(shù)據(jù),而類中的每個屬性被映射為數(shù)據(jù)表中的一列字段。
可能你還是很懵逼,沒關系,我們從偽代碼中再來看看這些概念。
模型類定義
模型定義的基本結構如下:
from django.db import modelsclass ModelName(models.Model):
field1 = models.XXField(...)
fiels2 = models.XXField(...)
...
class Meta:
db_table = ...
other metas = ...
解析如下:
所有Django模型都是django.db.models.Model類的子類。每個類都會被轉換為數(shù)據(jù)庫表
通過其中的類屬性定義模型字段,模型字段必須是某種models.XXField類型,比如CharField,DateTimeField等等,而這些就會被轉換為對應數(shù)據(jù)庫表中的列
通過模型類中的Meta子類定義模型元數(shù)據(jù),比如數(shù)據(jù)庫表名、數(shù)據(jù)默認排序方式等。
我們來詳細看一個樣例:定義了一個 Person, 其擁有 first_name 和 last_name:
from django.db import modelsclass Person(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
first_name 和 last_name 是模型的字段。每個字段都被指定為一個類屬性,并且每個屬性映射為一個數(shù)據(jù)庫列。
上面的 Person 模型會創(chuàng)建一個如下的數(shù)據(jù)庫表:
CREATE TABLE myapp_person ("id" serial NOT PRIMARY KEY,
"first_name" varchar(30) NOT ,
"last_name" varchar(30) NOT
);
我們介紹一下class Meta中的那些屬性,Meta類的屬性名由Django預定義,我們無需自己創(chuàng)建,Model 元數(shù)據(jù)就是 "不是一個字段的任何數(shù)據(jù)" -- 比如排序選項,常見的Meta類屬性匯總如下:
abstract: True or False,標識本類是否為抽象基類
app_label:定義本類所屬的應用,比如app_labels = 'myapp'
db_table:映射的數(shù)據(jù)表名,比如db_table='db_blogs'
default_related_name:定義本模型的反向關系引用名稱,默認與模型名一致。
ordering:本模型記錄的默認排序字段,可以設置多個字段,默認以升序排列,如果降序需要在字段前加“負號”。比如,按文章發(fā)布時間降序顯示:
ordering = ("-publish_date 與50位技術專家面對面20年技術見證,附贈技術全景圖
總結
以上是生活随笔為你收集整理的排序字段设计_「原创」第四章、模型设计的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python中迭代器有哪些_Python
- 下一篇: python 整数输出 d f_如何将数