Django 模型(Model)

1. 模型簡介

ORM 簡介

MVC 框架中一個重要的部分就是 ORM,它實現了數據模型與數據庫的解耦,即數據模型的設計不需要依賴于特定的數據庫,通過簡單的配置就可以輕松更換數據庫。即直接面向對象操作數據,無需考慮 sql 語句

ORM 是“對象-關系-映射”的簡稱,主要任務是:

  • 根據對象的類型生成表結構。
  • 將對象(或對象列表)的操作,轉換為 sql 語句。
  • 將 sql 查詢到的結果轉換為對象(或對象列表)。

這極大的減輕了開發人員的工作量,不需要面對因數據庫變更而導致的無效勞動。

Django 中的模型包含了存儲數據的字段和約束,對應著數據庫中唯一的表。

 

使用 Mysql 數據庫的環境配置

創建數據庫

create databases modeldemo charset=utf8

打開應用的 settings.py 文件,修改 DATABASES 項:

DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'modeldemo',  # 使用的Mysql庫名'USER': '用戶名','PASSWORD': '密碼','HOST': '數據庫服務器ip,本地可以使用localhost','PORT': '端口,默認為3306',}
}

安裝 python mysql API

python3
pip install pymysql 

且要在項目的 __init__.py 中添加:

import pymysql
pymysql.version_info = (1, 4, 13, "final", 0)  # 指定版本。在出現“mysqlclient 1.4.0 or newer is required; you have 0.9.3.”報錯時加上此行
pymysql.install_as_MySQLdb()

否則會出現報錯:Error loading MySQLdb module: No module named 'MySQLdb'。

python2(已廢棄,基本不用,可以不考慮)
pip install MySQL-python

且不需要在 __init__.py 中添加上述代碼。

開發流程

  1. 在 models.py 中定義模型類,要求繼承自 models.Model。
  2. 把應用加入 settings.py 文件的 installed_app 項。
  3. 遷移:生成遷移文件;執行遷移并生成表(遷移的目的是映射模型類與表。如果模型類與表的映射關系已存在,則無需遷移)。
  4. 使用模型類進行 crud(增刪改查)操作。

 

2. 定義模型

在模型中定義屬性,會生成表中的字段。

Django 根據屬性的類型確定以下信息:

  • 當前選擇的數據庫支持字段的類型(核心)。
  • 渲染管理站點表單時使用的默認 html 控件。
  • 在管理站點最低限度的驗證。

Django 會為表增加自動增長的主鍵列,每個模型只能有一個主鍵列,如果使用選項設置某屬性為主鍵列后,則 Django 不會再生成默認的主鍵列。

屬性命名限制:

  • 不能是 python 的保留關鍵字。
  • 由于 Django 的查詢方式,不允許帶有連續的下劃線。

 

1)定義屬性

定義屬性時,需要明確字段類型。字段類型被定義在 django.db.models.fields 目錄下,為了方便使用,被導入到了 django.db.models 中。

使用方式:

from django.db import models

通過 models.Field 創建字段類型的對象,賦值給屬性。如:

title = models.CharField(max_length=20)

若想對重要數據都做邏輯刪除而不做物理刪除,實現方法是定義 isDelete 屬性,類型為 BooleanField,默認值為 False。

 

2)字段類型

  • AutoField:一個根據實際 id 自動增長的 IntegerField,通常不指定。
    • 如果不指定,一個主鍵字段將自動添加到模型中。
  • BooleanField:true/false 字段,此字段的默認表單控制是 CheckboxInput。
  • NullBooleanField:支持 null、true、false 三種值。
  • CharField(max_length=最大字符長度):字符串,默認的表單樣式是 TextInput。
  • TextField:大文本字段,一般超過 4000 字符時使用,默認的表單控件是 Textarea。
  • IntegerField:整數。
  • DecimalField(max_digits=None, decimal_places=None):使用 python 的 Decimal 實例表示的十進制浮點數。
    • DecimalField.max_digits:位數總數。
    • DecimalField.decimal_places:小數點后的數字位數。
  • FloatField:用 python 的 float 實例來表示的浮點數。
  • DateField[auto_now=False, auto_now_add=False]):使用 python 的 datetime.date 實例表示的日期。
    • 參數 DateField.auto_now:每次保存對象時,自動設置該字段為當前時間,用于"最后一次修改"的時間戳,它總是使用當前日期,默認為 false。
    • 參數 DateField.auto_now_add:當對象第一次被創建時自動設置當前時間,用于創建的時間戳,它總是使用當前日期,默認為 false。
    • 該字段默認對應的表單控件是一個 TextInput. 在管理員站點添加了一個 JavaScript 寫的日歷控件,和一個“Today"的快捷按鈕,包含了一個額外的 invalid_date 錯誤消息鍵。
    • auto_now_add, auto_now, and default 這些設置是相互排斥的,他們之間的任何組合將會發生錯誤的結果。
  • TimeField:使用 python 的 datetime.time 實例表示的時間,參數同 DateField。
  • DateTimeField:使用 python 的 datetime.datetime 實例表示的日期和時間,參數同 DateField。
  • FileField:一個上傳文件的字段。
  • ImageField:繼承了 FileField 的所有屬性和方法,但對上傳的對象進行校驗,確保它是個有效的 image。

 

3)字段選項

通過字段選項,可以實現對字段的約束。實現方式是通過字段對象的關鍵字參數指定。

  • null:如果為 True,Django 將空值以 NULL 存儲到數據庫中,默認值是 False。
  • blank:如果為 True,則該字段允許為空白,默認值是 False。
    • 對比:null 是數據庫范疇的概念,blank 是表單驗證證范疇的。
  • db_column:字段的名

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/90992.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/90992.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/90992.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

深入解析Hadoop RPC:技術細節與推廣應用

Hadoop RPC框架概述在分布式系統的核心架構中,遠程過程調用(RPC)機制如同神經網絡般連接著各個計算節點。Hadoop作為大數據處理的基石,其自主研發的RPC框架不僅支撐著內部組件的協同運作,更以獨特的工程哲學詮釋了分布…

為什么玩游戲用UDP,看網頁用TCP?

故事場景:兩種不同的遠程溝通方式假設你需要和遠方的朋友溝通一件重要的事情。方式一:TCP — 打一個重要的電話打電話是一種非常嚴謹、可靠的溝通方式。? 1. 建立連接 (三次握手):? 你拿起電話,撥號(SYN)。? 朋友那…

【EGSR2025】材質+擴散模型+神經網絡相關論文整理隨筆(二)

High-Fidelity Texture Transfer Using Multi-Scale Depth-Aware Diffusion 這篇文章可以從一個帶有紋理的幾何物體出發,將其身上的紋理自動提取并映射到任意的幾何拓撲結構上(見下圖紅線左側);或者從一個白模幾何對象出發&#x…

深度學習圖像分類數據集—玉米粒質量識別分類

該數據集為圖像分類數據集,適用于ResNet、VGG等卷積神經網絡,SENet、CBAM等注意力機制相關算法,Vision Transformer等Transformer相關算法。 數據集信息介紹:玉米粒質量識別分類:[crush, good, mul] 訓練數據集總共有3…

Unity VR手術模擬系統架構分析與數據流設計

Unity VR手術模擬系統架構分析與數據流設計 前言 本文將深入分析一個基于Unity引擎開發的多人VR手術模擬系統。該系統采用先進的網絡架構設計,支持多用戶實時協作,具備完整的手術流程引導和精確的工具交互功能。通過對系統架構和數據管道的詳細剖析&…

【Spring Boot】Spring Boot 4.0 的顛覆性AI特性全景解析,結合智能編碼實戰案例、底層架構革新及Prompt工程手冊

Spring Boot 4.0 的顛覆性AI特性全景解析,結合智能編碼實戰案例、底層架構革新及Prompt工程手冊一、Spring Boot 4.0 核心AI能力矩陣二、AI智能編碼插件實戰(Spring AI Assistant)1. 安裝與激活2. 實時代碼生成場景3. 缺陷預測與修復三、AI引…

audiobookshelf-web 項目怎么運行

git clone https://github.com/audiobookshelf/audiobookshelf-web.git cd audiobookshelf-web npm i 啟動項目 npm run dev http://localhost:3000/

掃描文件 PDF / 圖片 糾斜 | 圖片去黑邊 / 裁剪 / 壓縮

問題:掃描后形成的 PDF 或圖片文檔常存在變形傾斜等問題,手動調整頗為耗時費力。 一、PDF 糾斜 - Adobe Acrobat DC 1、所用功能 掃描和 OCR: 識別文本:在文件中 → 設置 確定后啟動掃描,識別過程中自動糾偏。 2、…

適配器模式:兼容不兼容接口

將一個類的接口轉換成客戶端期望的另一個接口,解決接口不兼容問題。代碼示例:// 目標接口(客戶端期望的格式) interface ModernPrinter {void printDocument(String text); }// 被適配的舊類(不兼容) class…

流程控制:從基礎結構到跨語言實踐與優化

流程控制 一、流程控制基礎概念與核心價值 (一)流程控制定義與本質 流程控制是通過特定邏輯結構決定程序執行順序的機制,核心是控制代碼運行路徑,包括順序執行、條件分支、循環迭代三大核心邏輯。其本質是將無序的指令集合轉化為有…

Http與Https區別和聯系

一、HTTP 詳解 HTTP(HyperText Transfer Protocol)?? 是互聯網數據通信的基礎協議,用于客戶端(瀏覽器)與服務器之間的請求-響應交互 核心特性??: 1.無連接(Connectionless)??…

飛算JavaAI:開啟 Java 開發 “人機協作” 新紀元

每日一句 明天是新的一天, 你也不再是昨天的你。 目錄每日一句一、需求到架構:AI深度介入開發“源頭設計”1.1 需求結構化:自然語言到技術要素的精準轉化1.2 架構方案生成:基于最佳實踐的動態適配二、編碼全流程:從“…

Qt項目鍛煉——TODO(五)

發現問題如果是自己創建的ui文件,怎么包含進自己的窗口類并且成為ui成員?一般來說Qt designer 會根據你.ui文件生成對應的ui_文件名這個類(文件名是ui文件名),它包含了所有 UI 組件(如按鈕、文本框、標簽等…

Vue框架之模板語法全面解析

Vue框架之模板語法全面解析一、模板語法的核心思想二、插值表達式:數據渲染的基礎2.1 基本用法:渲染文本2.2 純HTML渲染:v-html指令2.3 一次性插值:v-once指令三、指令系統:控制DOM的行為3.1 條件渲染:v-if…

從零開始的語言模型構建 CS336 第一課(一)

語言模型的發展歷史 🏗 Early foundation models (2010年代后期) 2018:ELMo(基于 LSTM 預訓練 微調)[Peters 2018]2018:BERT(基于 Transformer 預訓練 微調)[Devlin 2018]2019:G…

微信獲取access_token授權的兩種不同情況

1.網頁授權:需要頁面調用授權的sdk,首先需要獲取到code參數 (A.網頁版的獲取code參考另一篇文章:https://blog.csdn.net/ettamei/article/details/148763361?spm1011.2415.3001.5331 B.前端sdk提供:code只有5分鐘的有…

達夢數據庫windows靜默安裝

<DATABASE> <!-- 安裝數據庫的語言配置&#xff0c;簡體中文版: ZH&#xff0c;繁體中文版: CHT&#xff0c;英文版: EN&#xff0c;不區分大小寫。不允許為空 --> <LANGUAGE>ZH</LANGUAGE> <!-- 安裝程序的時區配置&#xff0c;缺省為08:00&#…

20250709榮品RD-RK3588開發板的Android13系統下修改為連續長按10s開機

20250709榮品RD-RK3588開發板的Android13系統下修改為連續長按10s開機 2025/7/9 10:11緣起&#xff1a;由于榮品RD-RK3588開發板使用的PMIC是RK806。 以前在榮品PRO-RK3566開發板上使用的PMIC是RK809上做過了長按開機的。 直接遷移過來了&#xff01;1、根據RK809的DATASHEET&a…

20250713-`Seaborn.pairplot` 的使用注意事項

Seaborn.pairplot 的使用注意事項 sns.pairplot 是 Seaborn 中最常用、最強大的探索性數據分析&#xff08;EDA&#xff09;函數之一。 它在一個調用里就能同時展示&#xff1a; 任意兩兩變量間的 散點圖&#xff08;觀察關系、聚類、異常值&#xff09;對角線上每個變量的 單…

如何選擇合適的AI論文寫作工具?七個AI英文論文寫作網站

在寫作英文論文時&#xff0c;許多人往往會遇到寫作思路卡殼、語言不流暢、重復率過高等問題。幸運的是&#xff0c;AI論文寫作工具的出現&#xff0c;極大地提升了寫作效率和質量。這些工具不僅可以幫你快速生成內容、擴展論點&#xff0c;還可以優化語言&#xff0c;幫助你順…