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