django之模型類的建立
定義模型類
- 模型類被定義在"應用/models.py"檔案中。
- 模型類必須繼承自Model類,位於包django.db.models中。
接下來首先以"圖書-英雄"管理為例進行演示。
1 定義
建立應用booktest,在models.py 檔案中定義模型類。
from django.db import models #定義圖書模型類BookInfo class BookInfo(models.Model): btitle = models.CharField(max_length=20, verbose_name='名稱') bpub_date = models.DateField(verbose_name='釋出日期') bread = models.IntegerField(default=0, verbose_name='閱讀量') bcomment = models.IntegerField(default=0, verbose_name='評論量') is_delete = models.BooleanField(default=False, verbose_name='邏輯刪除') class Meta: db_table = 'tb_books' # 指明資料庫表名 verbose_name = '圖書' # 在admin站點中顯示的名稱 verbose_name_plural = verbose_name # 顯示的複數名稱 def __str__(self): """定義每個資料物件的顯示資訊""" return self.btitle #定義英雄模型類HeroInfo class HeroInfo(models.Model): GENDER_CHOICES = ( (0, 'male'), (1, 'female') ) hname = models.CharField(max_length=20, verbose_name='名稱') hgender = models.SmallIntegerField(choices=GENDER_CHOICES, default=0, verbose_name='性別') hcomment = models.CharField(max_length=200, null=True, verbose_name='描述資訊') hbook = models.ForeignKey(BookInfo, on_delete=models.CASCADE, verbose_name='圖書') # 外來鍵 is_delete = models.BooleanField(default=False, verbose_name='邏輯刪除') class Meta: db_table = 'tb_heros' verbose_name = '英雄' verbose_name_plural = verbose_name def __str__(self): return self.hname
1) 資料庫表名
模型類如果未指明表名,Django預設以 小寫app應用名_小寫模型類名 為資料庫表名。
可通過db_table 指明資料庫表名。
2) 關於主鍵
django會為表建立自動增長的主鍵列,每個模型只能有一個主鍵列,如果使用選項設定某屬性為主鍵列後django不會再建立自動增長的主鍵列。
預設建立的主鍵列屬性為id,可以使用pk代替,pk全拼為primary key。
3) 屬性命名限制
- 不能是python的保留關鍵字。
- 不允許使用連續的下劃線,這是由django的查詢方式決定的。
-
定義屬性時需要指定欄位型別,通過欄位型別的引數指定選項,語法如下:
屬性=models.欄位型別(選項)
4)欄位型別
型別 | 說明 |
---|---|
AutoField | 自動增長的IntegerField,通常不用指定,不指定時Django會自動建立屬性名為id的自動增長屬性 |
BooleanField | 布林欄位,值為True或False |
NullBooleanField | 支援Null、True、False三種值 |
CharField | 字串,引數max_length表示最大字元個數 |
TextField | 大文字欄位,一般超過4000個字元時使用 |
IntegerField | 整數 |
DecimalField | 十進位制浮點數, 引數max_digits表示總位數, 引數decimal_places表示小數位數 |
FloatField | 浮點數 |
DateField | 日期, 引數auto_now表示每次儲存物件時,自動設定該欄位為當前時間,用於"最後一次修改"的時間戳,它總是使用當前日期,預設為False; 引數auto_now_add表示當物件第一次被建立時自動設定當前時間,用於建立的時間戳,它總是使用當前日期,預設為False; 引數auto_now_add和auto_now是相互排斥的,組合將會發生錯誤 |
TimeField | 時間,引數同DateField |
DateTimeField | 日期時間,引數同DateField |
FileField | 上傳檔案欄位 |
ImageField | 繼承於FileField,對上傳的內容進行校驗,確保是有效的圖片 |
5) 選項
選項 | 說明 |
---|---|
null | 如果為True,表示允許為空,預設值是False |
blank | 如果為True,則該欄位允許為空白,預設值是False |
db_column | 欄位的名稱,如果未指定,則使用屬性的名稱 |
db_index | 若值為True, 則在表中會為此欄位建立索引,預設值是False |
default | 預設 |
primary_key | 若為True,則該欄位會成為模型的主鍵欄位,預設值是False,一般作為AutoField的選項使用 |
unique | 如果為True, 這個欄位在表中必須有唯一值,預設值是False |
null是資料庫範疇的概念,blank是表單驗證範疇的
6) 外來鍵
在設定外來鍵時,需要通過on_delete選項指明主表刪除資料時,對於外來鍵引用表資料如何處理,在django.db.models中包含了可選常量:
-
CASCADE 級聯,刪除主表資料時連通一起刪除外來鍵表中資料
-
PROTECT 保護,通過丟擲ProtectedError異常,來阻止刪除主表中被外來鍵應用的資料
-
SET_NULL 設定為NULL,僅在該欄位null=True允許為null時可用
-
SET_DEFAULT 設定為預設值,僅在該欄位設定了預設值時可用
-
SET() 設定為特定值或者呼叫特定方法,如
from django.conf import settings from django.contrib.auth import get_user_model from django.db import models def get_sentinel_user(): return get_user_model().objects.get_or_create(username='deleted')[0] class MyModel(models.Model): user = models.ForeignKey( settings.AUTH_USER_MODEL, on_delete=models.SET(get_sentinel_user), )
-
DO_NOTHING 不做任何操作,如果資料庫前置指明級聯性,此選項會丟擲IntegrityError異常
2 遷移
將模型類同步到資料庫中。
1)生成遷移檔案
python manage.py makemigrations
2)同步到資料庫中
python manage.py migrate
3 新增測試資料
insert into tb_books(btitle,bpub_date,bread,bcomment,is_delete) values
('射鵰英雄傳','1980-5-1',12,34,0),
('天龍八部','1986-7-24',36,40,0),
('笑傲江湖','1995-12-24',20,80,0),
('雪山飛狐','1987-11-11',58,24,0);
insert into tb_heros(hname,hgender,hbook_id,hcomment,is_delete) values
('郭靖',1,1,'降龍十八掌',0),
('黃蓉',0,1,'打狗棍法',0),
('黃藥師',1,1,'彈指神通',0),
('歐陽鋒',1,1,'蛤蟆功',0),
('梅超風',0,1,'九陰白骨爪',0),
('喬峰',1,2,'降龍十八掌',0),
('段譽',1,2,'六脈神劍',0),
('虛竹',1,2,'天山六陽掌',0),
('王語嫣',0,2,'神仙姐姐',0),
('令狐沖',1,3,'獨孤九劍',0),
('任盈盈',0,3,'彈琴',0),
('嶽不群',1,3,'華山劍法',0),
('東方不敗',0,3,'葵花寶典',0),
('胡斐',1,4,'胡家刀法',0),
('苗若蘭',0,4,'黃衣',0),
('程靈素',0,4,'醫術',0),
('袁紫衣',0,4,'六合拳',0);
相關推薦
django之模型類的建立
定義模型類 模型類被定義在"應用/models.py"檔案中。 模型類必須繼承自Model類,位於包django.db.models中。 接下來首先以"圖書-英雄"管理為例進行演示。 1 定義 建立應用booktest,在models.py 檔案中定義模型類。 fr
Django項目的ORM操作之--模型類數據查詢
ron 基本 import lte nth true 實例對象 exclude false 1.查詢基本格式及理解: 類名.objects.[查詢條件] 例如我們要查詢數據庫中一張表(bookinfo)的所有數據,sql語句為:select * from bookinf
潭州課堂25班:Ph201805201 django框架 第五課 自定義簡單標籤,包含標籤,模型類建立,梳理類建立 (課堂筆記)
自定義標籤同自定義過渡器一樣,要建立檔案,在配置檔案中以APP方法註冊,對方法進註冊,在 html 檔案中引入,.. 由模板傳參 在 在配置檔案中改時區: 由檢視函式傳參 &nbs
西遊之路——python全棧——Django中模型類中Meta元物件瞭解
目錄 Django中模型類中Meta元物件瞭解 1.使用python manage.py shell 進入編輯命令列模式,可以直接進入專案(為我們配置好了環境) 2.對於元類資料的獲取,需要使用_meta獲取 3.幾個重要屬性  
67、django之模型層(model)--查詢補充及mookie
lte 評論 spl 需要 delete net 使用 刪除 ces 本篇導航: F查詢與Q查詢 cookie 一、F查詢與Q查詢 1、以Book表為例 class Book(models.Model) : title = models.Cha
Django之模型ORM
鏈接 否則 包含 子類 filter 項目 失去 ref bject Object Relational Mapping(ORM) ORM介紹 ORM概念 對象關系映射(Object Relational Mapping,簡稱ORM)模式是一種為了解決面向對象與關系數
django定義模型類
模型類被定義在應用資料夾下的model.py中 模型類必須繼承Django的models.Model類 屬性名不能用連續的兩條下劃線__ 主鍵:primary key,簡寫 pk 不需要主動定義,django會自動生成自增長的主鍵,屬性名叫&n
Django之模型---ORM簡介
ORM ORM,是“物件-關係-對映”的簡稱,它實現了資料模型與資料庫的解耦,即資料模型的設計不需要依賴於特定的資料庫,通過簡單的配置就可以輕鬆更換資料庫,這極大的減輕了開發人員的工作量,不需要面對因資料庫變更而導致的無效勞動。 建立表/模型 建立專案,在models.py下建立表
Django之模型---ORM 單表操作
以上一隨筆中建立的book表為例講解單表操作 新增表記錄 方式一 # create方法的返回值
Django之model模組建立表完整過程
Django中,與資料庫相關的模組是model模組,它提供了一種簡單易操作的API方式與資料庫互動,它是通過ORM對映的方式來操作資料庫,一個類對應資料庫一張表,一個類屬性,對應該表的一個欄位,一個例項化的類物件就是一個表中的一行資料資訊。在開發的階段,工程師只需要python語言本身進行程式碼設計,而不用太
django之模型關係
一對一模型:關係欄位定義在任意一端中 一對多模型:關係欄位定義在多的一端中;一對多中,外來鍵對應的是主表的一個物件,而不是一個單純的id 多對多模型:自動生成第三張表,第三張表為關係表;先例項化物件新增兩張表,然後再新增關係 生成遷移檔案: python manage.py makemigratio
DRF---Django中 模型類序列化器 ModelSerializer
關於常規的Serializer使用方法,可以參考 常規的Serializer講解 如果我們需要使用的序列化器,是對應Django的模型類,那麼,DRF已經為我們提供了ModelSerializer模型類序列化器,可以滿足我們的需求,快速建立一個Serializer類。 Mode
Django之模型層,單,多表操作(一)
一:資料庫型別 資料庫主要分成兩類,關係型資料庫和非關係型資料庫,具體區別可參照部落格地址,https://blog.csdn.net/u012965373/article/details/51779361。以下個人簡單理解 1:關係型資料庫: ORM 物件關係型對映。用物件的方式儲存資
Django之模型層,單,多表操作(三)
一:多表操作之增、刪、改 1.1:增: 一對多: 方式1: publish_obj=Publish.objects.get(nid=1) book_obj=Book.objects.create(title="海爾兄弟",publi
Django之模型層,單,多表操作(二)
一:單表操作之增,刪,改 1.1:增 方式一: book_obj=Book.objects.create(title="python葵花寶典",state=True,price=100,publish="蘋果出版社",pub_date="2012-12-12") 方式二
Django之模型層-瞭解ORM
ORM(物件-關係-對映)簡單使用 ORM實現了資料模型與資料庫的解耦合,即資料模型的設計不需要指定特定的資料庫,通過python程式碼可以直接對資料庫實現增刪改查 MySQL語法 #sql中的表
Django之模型層-多表操作
自動 int its 數量 val foreign 編寫 ces first 多表操作 數據庫表關系 一對多:兩個表之間的關系一旦確定為一對多,必須在數據多的表中創建關聯字段 多對多:兩個表之間的關系一定確定為多對多,必須創建第三張表(關聯表) 一對一:一旦兩個表之間的關
Django使用者模型類User
Django認證系統同時處理認證和授權。簡單地講,認證驗證一個使用者是否它們聲稱的那個人,授權決定一個通過了認證的使用者被允許做什麼。 這裡的詞語“認證”同時指代這兩項任務,即Django的認證系統同時提供了認證機制和許可權機制。 Django的認證系統包含
DRF---Django中 模型類序列化器 ModelSerializer
關於常規的Serializer使用方法,可以參考 常規的Serializer講解 如果我們需要使用的序列化器,是對應Django的模型類,那麼,DRF已經為我們提供了ModelSerializer模型類序列化器,可以滿足我們的需求,快速建立一個Serializ