摘要:在模型中添加是完全可選的,所有選項(xiàng)都不是必須的。一個(gè)模型的數(shù)據(jù)庫表名稱,由這個(gè)模型的應(yīng)用名和模型類名稱之間加上下劃線組成。使用來表示隨機(jī)排序。默認(rèn)值為這個(gè)選項(xiàng)為時(shí)可以對數(shù)據(jù)庫表進(jìn)行或刪除等操作。
Django模型理論知識 簡介
Django模型所在的位置:
URL--->視圖--->模型(mysql)
什么是模型:
模型就是數(shù)據(jù)的唯一的&權(quán)威的信息源
包含所存儲的詩句的必要字段和行為(屬性和方法)
一個(gè)模型對應(yīng)一張表
如何編寫模型:
模型:每個(gè)模型都用一個(gè)類表示,該類繼承自django.db.models.Model。每個(gè)模型有多個(gè)類的屬性變量,而每一個(gè)類的屬性變量又都代表了數(shù)據(jù)庫表中的一個(gè)字段模型字段
字段:每個(gè)字段通過Field類的一個(gè)實(shí)例表示 —— 例如字符字段CharField和日期字段DateTimeField。這種方法告訴Django,每個(gè)字段中保存著什么類型的數(shù)據(jù)
字段名:每個(gè)Field 實(shí)例的名字(例如username)就是字段的名字,并且是機(jī)器可讀的格式。你將在Python代碼中使用到它的值,并且你的數(shù)據(jù)庫將把它用作表的列名
文檔
自增主鍵Field默認(rèn)情況下Django會給每個(gè)模型添加下面這個(gè)字段
id = models.AutoField(primary_key=True)
如果Django看到你顯式地設(shè)置了Field.primary_key, 就不會自動(dòng)添加 id 列
每個(gè)模型只能有一個(gè)字段指定primary_key=True (無論是顯式聲明還是自動(dòng)添加)
每個(gè)字段類型都接受一個(gè)可選的位置參數(shù)——字段的自述名,如果沒有給定自述名,Django將根據(jù)字段的屬性名稱自動(dòng)創(chuàng)建自述名——將屬性名稱的下劃線替換成空格
ForeignKey、 ManyToManyField 和 OneToOneField 這三個(gè)可以使用verbose_name指定自述名
例如:自述名為:"person"s first name"
first_name = models.CharField("person"s first name", max_length=30)
例如:自述名為:"first name"
first_name = models.CharField(max_length=30)
每個(gè)字段有一些特有的參數(shù),例如,CharField(和它的派生類)需要max_length 參數(shù)來指定VARCHAR 數(shù)據(jù)庫字段的大小
null
如果為True,Django將用NULL來在數(shù)據(jù)庫中存儲空值 默認(rèn)值:False
blank
如果為True , 該字段允許不填 默認(rèn)值:False null是純數(shù)據(jù)庫范疇,而blank是數(shù)據(jù)驗(yàn)證范疇的 blank=True,表單驗(yàn)證允許該字段為空 blank=False,該字段就是必須的
choices
由二元組組成的一個(gè)可迭代對象(如列表或元組),用來給字段提供選擇項(xiàng),如果設(shè)置了choices, 默認(rèn)的表單將是一個(gè)選擇框,選擇框的選擇就是choices中的選項(xiàng) YEAR_IN_SCHOOL_CHOICES = ( ("FR", "Freshman"), ("SO", "Sophomore"), ("JR", "Junior"), ("SR", "Senior"), )
default
字段的默認(rèn)值,可以是一個(gè)值或者調(diào)用對象
primary_key
如果為True,那么這個(gè)字段就是模型的主鍵
unique
如果該值設(shè)置為True,這個(gè)字段的值在整張表中必須是唯一的
index
普通索引
更多
模型Meta選項(xiàng)使用內(nèi)部的class Meta 定義模型的元數(shù)據(jù),例如:
from django.db import models class User(models.Model): username = models.IntegerField() class Meta: ordering = ["username"] 模型元數(shù)據(jù)是“任何不是字段的數(shù)據(jù)”,比如排序選項(xiàng)(ordering),數(shù)據(jù)庫表名(db_table)。在模型中添加class Meta是完全可選的,所有選項(xiàng)都不是必須的。
db_table:db_table是用于指定自定義數(shù)據(jù)庫表名的
Django有一套默認(rèn)的按照一定規(guī)則生成數(shù)據(jù)模型對應(yīng)的數(shù)據(jù)庫表名,如果你想使用自定義的表名,就通過這個(gè)屬性指定 若不提供該參數(shù), Django 會使用 app_name + "_" + module_name 作為表的名字 Django 會根據(jù)模型類的名稱和包含它的應(yīng)用的名稱自動(dòng)指定數(shù)據(jù)庫表名稱。一個(gè)模型的數(shù)據(jù)庫表名稱,由這個(gè)模型的“應(yīng)用名” 和模型類名稱之間加上下劃線組成。 使用Meta類中的 db_table 參數(shù)來重寫數(shù)據(jù)表的名稱。 當(dāng)你通過db_table覆寫表名稱時(shí),強(qiáng)烈推薦使用小寫字母給表命名
ordering:這個(gè)字段是告訴Django模型對象返回的記錄結(jié)果集是按照哪個(gè)字段排序的
class Meta: ordering = ["-order_date"] 它是一個(gè)字符串的列表或元組。每個(gè)字符串是一個(gè)字段名,前面帶有可選的“-”前綴表示倒序。前面沒有“-”的字段表示正序。使用"?"來表示隨機(jī)排序。 ordering = ["order_date"] # 按訂單升序排列 ordering = ["-order_date"] # 按訂單降序排列,-表示降序 ordering = ["?order_date"] # 隨機(jī)排序,?表示隨機(jī) ordering = ["-pub_date", "author"] # 對 pub_date 降序,然后對 author 升序
app_label
app_label這個(gè)選項(xiàng)只在一種情況下使用,就是你的模型類不在默認(rèn)的應(yīng)用程序包下的models.py文件中,這時(shí)候你需要指定你這個(gè)模型類是那個(gè)應(yīng)用程序的 class Meta: app_label="myapp"
get_last_by
由于Django的管理方法中有個(gè)lastest()方法,就是得到最近一行記錄。如果你的數(shù)據(jù)模型中有 DateField 或 DateTimeField 類型的字段,你可以通過這個(gè)選項(xiàng)來指定lastest()是按照哪個(gè)字段進(jìn)行選取的。 一個(gè) DateField 或 DateTimeField 字段的名字. 若提供該選項(xiàng), 該模塊將擁有一個(gè) get_latest() 函數(shù)以得到 "最新的" 對象(依據(jù)那個(gè)字段): class Meta: get_latest_by = "order_date"
verbose_name的意思很簡單,就是給你的模型類起一個(gè)更可讀的名字
class Meta: verbose_name = "pizza"
managed:管理第三方庫一定要設(shè)置成False
由于Django會自動(dòng)根據(jù)模型類生成映射的數(shù)據(jù)庫表,如果你不希望Django這么做,可以把managed的值設(shè)置為False。 默認(rèn)值為True,這個(gè)選項(xiàng)為True時(shí)Django可以對數(shù)據(jù)庫表進(jìn)行 migrate或migrations、刪除等操作。在這個(gè)時(shí)間Django將管理數(shù)據(jù)庫中表的生命周期 如果為False的時(shí)候,不會對數(shù)據(jù)庫表進(jìn)行創(chuàng)建、刪除等操作??梢杂糜诂F(xiàn)有表、數(shù)據(jù)庫視圖等,其他操作是一樣的。
更多
數(shù)據(jù)庫的遷移遷移是Django用于同步你的發(fā)生改變的模型(添加一個(gè)字段,刪除一個(gè)模型,等等)到你的數(shù)據(jù)庫,實(shí)質(zhì)上也是就是管理數(shù)據(jù)表的生命周期
遷移命令
makemigrations, 負(fù)責(zé)基于你的模型修改創(chuàng)建一個(gè)新的遷移 migrate, 負(fù)責(zé)執(zhí)行遷移, 以及撤銷和列出遷移的狀態(tài)。 sqlmigrate, 展示遷移的sql語句
生成遷移文件
python manage.py makemigrations dashboard 會掃描和比較你當(dāng)前遷移文件里面的版本,同時(shí)新的遷移文件會被創(chuàng)建
展示遷移的sql語句
python manage.py sqlmigrate dashboard 0007
數(shù)據(jù)遷移
python manage.py migrate dashboard
當(dāng)模型和數(shù)據(jù)庫字段不一致的問題
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/44976.html
摘要:本期貓薦書欄目系列之六,就以此為話題,推薦給大家兩本書它們都叫深度學(xué)習(xí),但是內(nèi)容很不一樣。事實(shí)上,第一本書被很多人譽(yù)為深度學(xué)習(xí)的圣經(jīng),知名度極高,有一個(gè)昵稱叫作花書。 最近出了兩件大新聞,相信大家可能有所耳聞。 我來當(dāng)個(gè)播報(bào)員,給大家轉(zhuǎn)述一下: 1、中國隊(duì)在第 11 界羅馬尼亞數(shù)學(xué)大師賽(RMM)中無緣金牌。該項(xiàng)賽事是三大國際賽事之一,被譽(yù)為中學(xué)奧數(shù)的最高難度。其中一道題,令中國隊(duì)全軍...
摘要:源網(wǎng)頁說明文檔所有關(guān)于你應(yīng)該且必須知道的。性能和優(yōu)化概述的兼容性旨在兼容多種不同版本的支持的兼容性地理框架打算成為世界級的地理框架。其目標(biāo)是盡可能簡單地構(gòu)建應(yīng)用程序并利用空間使能數(shù)據(jù)的功能。 源網(wǎng)頁:https://docs.djangoproject.co... django說明文檔 所有關(guān)于django你應(yīng)該且必須知道的。 第一步 你是否django編程新手,那就從此開始!從零開始...
摘要:現(xiàn)在,我們將會剖析的工作原理,而最重要的是它和在性能方面的比對加載時(shí)間,執(zhí)行速度,垃圾回收,內(nèi)存使用,平臺訪問,調(diào)試,多線程以及可移植性。目前,是專門圍繞和的使用場景設(shè)計(jì)的。目前不支持多線程。 原文請查閱這里,略有改動(dòng),本文采用知識共享署名 4.0 國際許可協(xié)議共享,BY Troland。 本系列持續(xù)更新中,Github 地址請查閱這里。 這是 JavaScript 工作原理的第六章...
閱讀 1567·2021-11-19 09:55
閱讀 2792·2021-09-06 15:02
閱讀 3561·2019-08-30 15:53
閱讀 1109·2019-08-29 16:36
閱讀 1245·2019-08-29 16:29
閱讀 2296·2019-08-29 15:21
閱讀 634·2019-08-29 13:45
閱讀 2688·2019-08-26 17:15