Python學習第十八天

Django模型

  • 定義:模型是 Django 中用于定義數據庫結構的 Python 類。每個模型類對應數據庫中的一張表,類的屬性對應表的字段。

  • 作用:通過模型,Django 可以將 Python 代碼與數據庫表結構關聯起來,開發者無需直接編寫 SQL 語句即可操作數據庫。

常用字段

字段類型說明示例
CharField用于存儲較短的字符串,必須指定?max_lengthname = models.CharField(max_length=100)
TextField用于存儲大段文本,不需要指定最大長度。description = models.TextField()
IntegerField用于存儲整數。age = models.IntegerField()
BooleanField用于存儲布爾值(True/False)。is_published = models.BooleanField(default=False)
DateField用于存儲日期(年月日)。birth_date = models.DateField()
DateTimeField用于存儲日期和時間。created_at = models.DateTimeField(auto_now_add=True)
EmailField用于存儲電子郵件地址,會自動驗證格式。email = models.EmailField(max_length=254)
URLField用于存儲 URL,會自動驗證格式。website = models.URLField(max_length=200)
DecimalField用于存儲固定精度的十進制數,需指定?max_digits?和?decimal_placesprice = models.DecimalField(max_digits=10, decimal_places=2)
FloatField用于存儲浮點數。rating = models.FloatField()
ForeignKey用于定義多對一關系,指向另一個模型。author = models.ForeignKey(Author, on_delete=models.CASCADE)
OneToOneField用于定義一對一關系。profile = models.OneToOneField(Profile, on_delete=models.CASCADE)
ManyToManyField用于定義多對多關系。tags = models.ManyToManyField(Tag)
FileField用于上傳文件。file = models.FileField(upload_to='uploads/')
ImageField用于上傳圖片,繼承自?FileField,會自動驗證是否為圖片。photo = models.ImageField(upload_to='photos/')
UUIDField用于存儲 UUID(通用唯一標識符)。id = models.UUIDField(primary_key=True, default=uuid.uuid4)
AutoField自動遞增的整數字段,通常用于主鍵。id = models.AutoField(primary_key=True)
BigAutoField類似?AutoField,但支持更大的范圍(64 位整數)。id = models.BigAutoField(primary_key=True)
SlugField用于存儲短標簽(URL 友好的字符串),通常用于 URL。slug = models.SlugField(unique=True)
BinaryField用于存儲二進制數據。data = models.BinaryField()
DurationField用于存儲時間間隔(如天數、小時數等)。duration = models.DurationField()
GenericIPAddressField用于存儲 IPv4 或 IPv6 地址。ip_address = models.GenericIPAddressField()
JSONField用于存儲 JSON 數據。metadata = models.JSONField()

常用參數

參數說明
max_length指定字段的最大長度(如?CharField)。
null如果為?True,數據庫中將允許存儲?NULL?值。
blank如果為?True,字段在表單中可以為空。
default指定字段的默認值。
unique如果為?True,字段值必須在表中唯一。
primary_key如果為?True,該字段將作為模型的主鍵。
choices提供一個可選的選項列表(如?GENDER_CHOICES = [('M', 'Male'), ('F', 'Female')])。
auto_now每次保存對象時自動設置為當前時間(常用于?DateTimeField)。
auto_now_add對象第一次創建時自動設置為當前時間(常用于?DateTimeField)。
upload_to指定文件上傳的目錄(用于?FileField?和?ImageField)。
on_delete指定外鍵關聯的對象被刪除時的行為(如?CASCADESET_NULL?等)。

注意:id 字段會自動生成,無需顯式定義(Django 默認會添加一個自增的 id 主鍵,如果不是這種情況需要手動添加字段)

from django.db import modelsclass User(models.Model):username = models.CharField(max_length=100, unique=True)password = models.CharField(max_length=100)email = models.EmailField(unique=True)first_name = models.CharField(max_length=100)last_name = models.CharField(max_length=100)def __str__(self):return self.username

舉個例子models中添加一個商品 類中有id(自動生成)、name、code、price、crate_time、update_time大家自己創建下 按照上面的命令

class Product(models.Model):# id 字段會自動生成,無需顯式定義(Django 默認會添加一個自增的 id 主鍵)name = models.CharField(max_length=100, verbose_name="商品名稱")code = models.CharField(max_length=50, unique=True, verbose_name="商品編碼")price = models.DecimalField(max_digits=10, decimal_places=2, verbose_name="商品價格")create_time = models.DateTimeField(auto_now_add=True, verbose_name="創建時間")update_time = models.DateTimeField(auto_now=True, verbose_name="更新時間")

Migrations

  • 定義:遷移是 Django 用來管理數據庫模式變更的機制。每次修改模型后,Django 會生成一個遷移文件,記錄模型的變化。

  • 作用:遷移文件允許你將數據庫模式從一種狀態更新到另一種狀態,同時保留現有數據。

  • 生成遷移文件:使用?python manage.py makemigrations?命令,Django 會檢測模型的變更,并生成相應的遷移文件。

    • 例如,修改user模型后,運行?makemigrations?會生成一個遷移文件,記錄這些變更。

product例子生成表名:myapp_product

makemigrations?和?migrate?的關系

  • makemigrations:生成遷移文件,記錄模型的變更。

  • migrate:應用遷移文件,將變更同步到數據庫中。

  • 流程:

    1. 修改模型(如添加字段、修改字段類型等)。

    2. 運行?python manage.py makemigrations,生成遷移文件。(注意如果說有報錯需要查看自己的settings.py中是否包含INSTALLED_APPS是否包含了myapp)

    3. 運行?python manage.py migrate,將遷移應用到數據庫(可以查看數據庫中建立的表,生成的表是app名稱_對象名)。

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

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

相關文章

Windows 圖形顯示驅動開發-WDDM 3.0功能- 硬件翻轉隊列(一)

WDDM 3.0 之前的翻轉隊列模型 許多新式顯示控制器支持對按順序顯示的多個幀排隊的能力。 從 WDDM 2.1 開始,OS 支持將在下一個 VSync 中顯示的多個未完成的翻轉覆蓋請求。 顯示微型端口驅動程序 (KMD) 通過 DXGK_DRIVERCAPS 中的 MaxQueuedMultiPlaneOverlayFlipVS…

《Python深度學習》第二講:深度學習的數學基礎

本講來聊聊深度學習的數學基礎。 深度學習聽起來很厲害,其實它背后是一些很有趣的數學原理。本講會用簡單的方式解釋這些原理,還會用一些具體的例子來幫助你理解。 2.1 初識神經網絡 先從一個簡單的任務開始:識別手寫數字。 想象一下,你有一堆手寫數字的圖片,你想讓計算…

車載DoIP測試 --- CANoe DoIP中如何配置路由激活請求中的 OEM 特定場(RoutingActivationWithOEMSpecific)

我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 簡單,單純,喜歡獨處,獨來獨往,不易合同頻過著接地氣的生活,除了生存溫飽問題之外,沒有什么過多的欲望,表面看起來很高冷,內心熱情,如果你身…

JDBC數據庫連接池技術詳解——從傳統連接方式到高效連接管理

1. 引言 在開發數據庫應用時,我們通常需要與數據庫建立連接并執行SQL語句。傳統的JDBC連接方式雖然簡單直接,但在高并發場景下容易帶來性能問題,甚至導致系統崩潰。因此,引入數據庫連接池(Connection Pool&#xff09…

【工具類】PDF文件轉圖片

PDF文件轉文件 1. 引入Maven依賴 主要使用了 pdfbox 包與 hutool 包。 pdfbox 負責 pdf 到圖片的轉換&#xff1b; hutool 負責文件讀取轉換。 <dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version…

使用DeepSeek,優化斐波那契數函數,效果相當不錯

下面這段代碼定義了一個遞歸函數 fibonacci&#xff0c;用于計算第 n 個斐波那契數。 def fibonacci(n):if n < 1:return nelse:return fibonacci(n - 1) fibonacci(n - 2)雖然代碼邏輯正確&#xff0c;但其性能較差&#xff0c;尤其是對于較大的 n 值&#xff0c;其復雜度…

Forward Looking Radar Imaging by Truncated Singular Value Decomposition 論文閱讀

Forward Looking Radar Imaging by Truncated Singular Value Decomposition and Its Application for Adverse Weather Aircraft Landing 1. 論文的研究目標與意義1.1 研究目標1.2 實際問題與意義2. 論文的創新方法與公式解析2.1 信號建模與問題轉化2.2 截斷奇異值分解(TSVD)…

provide/inject源碼實現

在 Vue 3 中&#xff0c;provide 和 inject 是通過 Vue 的響應式系統和組件實例機制實現的&#xff0c;底層是依賴 Vue 3 中的 Proxy 和 Reactive 來實現跨層級的數據傳遞和響應式綁定。以下是一個簡化版的實現邏輯&#xff0c;幫助理解 Vue 3 中 provide 和 inject 是如何實現…

Unix時間戳BKP備份寄存器RTC實時時鐘

Unix時間戳 Unix時間戳&#xff0c;也稱為POSIX時間或Epoch時間&#xff0c;是一種在Unix和類Unix操作系統中使用的時間表示方法。它表示的是自1970年1月1日00:00:00 UTC&#xff08;協調世界時&#xff09;至當前時間經過的秒數&#xff0c;不考慮閏秒。Unix時間戳通常以秒為…

【Linux內核系列】:進程板塊與文件板塊的綜合

&#x1f525; 本文專欄&#xff1a;Linux &#x1f338;作者主頁&#xff1a;努力努力再努力wz &#x1f4aa; 今日博客勵志語錄&#xff1a; 人生中成功只是一時的&#xff0c;失敗卻是人生的主旋律&#xff0c;但是如何面對失敗卻把人分成了不同的樣子&#xff0c;有的人會被…

CellOracle|基因擾動研究基因功能|基因調控網絡+虛擬干預

在gzh“生信小鵬”同步文章 論文來源: 發表期刊:Nature發表時間:2023年2月23日論文題目:Dissecting cell identity via network inference and in silico gene perturbation研究團隊:Kenji Kamimoto 等,華盛頓大學醫學院1. 研究背景與問題提出 細胞身份(Cell Identit…

專線、云 和 物聯網(IoT)

專線、云 和 物聯網&#xff08;IoT&#xff09; 是現代信息與通信技術&#xff08;ICT&#xff09;領域的三大重要組成部分&#xff0c;它們在企業和個人的數字化轉型中扮演著關鍵角色。以下是對這三者的詳細介紹及其相互關系&#xff1a; 1. 專線&#xff08;Leased Line&…

[Lc14_priority_queue] 最后一塊石頭重量 | 數據流中的第 K 大元素 | 前K個高頻單詞 | 數據流的中位數

目錄 1.最后一塊石頭的重量 題解 2.數據流中的第 K 大元素 題解 3.前K個高頻單詞 題解 代碼 ?4.數據流的中位數 題解 在C中&#xff0c;使用標準庫中的priority_queue&#xff0c;默認情況下它是一個最大堆&#xff08;即大堆排序&#xff09;&#xff0c;這意味著最…

XSS漏洞靶場---(復現)

XSS漏洞靶場—&#xff08;復現&#xff09; 反射型 XSS 的特點是攻擊者誘導用戶點擊包含惡意腳本的 URL&#xff0c;服務器接收到請求后將惡意腳本反射回響應頁面&#xff0c;瀏覽器執行該腳本從而造成攻擊&#xff0c;惡意腳本不會在服務器端存儲。 Level 1(反射型XSS) 此漏…

2025/3.17 郭院安排會議與南京銀行參訪

目錄 *郭院會議&#xff1a;服務外包*1.會遇到的問題以及解決方案2.考慮行業目前會碰到的瓶頸3.后端應該呈現處理圖像的過程4.記得做報告、文檔說明和視頻等工作 *南京銀行&#xff08;鑫合易家&#xff09;參訪記錄*1. 風險評分業務流程筆記![在這里插入圖片描述](https://i-b…

Cloud Ace 宣布成為 Langfuse 亞太地區首個代理商,提供 LLM 全鏈路解決方案

Cloud Ace 宣布正式代理 Langfuse 產品&#xff0c;是 Langfuse 在亞太地區唯一的官方授權經銷商&#xff0c;全面負責其商用許可證的銷售、部署與技術支持服務。通過此次合作&#xff0c;Cloud Ace 將充分發揮 Langfuse 的先進技術能力與行業專業知識&#xff0c;為企業級客戶…

Helm 的倉庫管理與 Chart 搜索

在使用 Helm 管理 Kubernetes 應用的過程中&#xff0c;倉庫管理與 Chart 搜索是兩個核心功能。通過 Helm 倉庫&#xff0c;用戶可以方便地存儲、分享和獲取 Helm Chart&#xff0c;而搜索功能則幫助用戶快速找到所需的 Chart。本文將詳細介紹 Helm 倉庫的概念、管理方法以及如…

Matlab 汽車振動多自由度非線性懸掛系統和參數研究

1、內容簡介 略 Matlab 169-汽車振動多自由度非線性懸掛系統和參數研究 可以交流、咨詢、答疑 2、內容說明 略 第二章 汽車模型建立 2.1 汽車懸架系統概述 2.1.1 懸架系統的結構和功能 2.1.2 懸架分類 2.2 四分之一車輛模型 對于車輛動力學&#xff0c;一般都是研究其懸…

免訓練指標(Zero-Cost Proxies)

1. 什么是免訓練指標&#xff08;Zero-Cost Proxies&#xff0c;ZC proxies&#xff09;&#xff1f; 免訓練指標是一類 無需完整訓練模型即可評估其性能的度量方法&#xff0c;主要用于提高 神經架構搜索&#xff08;NAS&#xff09; 的效率。 傳統 NAS 需要訓練候選架構來評…

C語言 —— 此去經年夢浪蕩魂音 - 深入理解指針(卷二)

目錄 1. 數組名與地址 2. 指針訪問數組 3.一維數組傳參本質 4.二級指針 5. 指針數組 6. 指針數組模擬二維數組 1. 數組名與地址 我們先看下面這個代碼&#xff1a; int arr[10] { 1,2,3,4,5,6,7,8,9,10 };int* p &arr[0]; 這里我們使用 &arr[0] 的方式拿到了數…